java.lang.IllegalArgumentException: URI is not hierarchical
at java.io.File.<init>(Unknown Source)
at com.test.Main.main(Main.java:15)
public class DOMParserFile {
private InputStream inputXML;
private InputStream inputXSD;
private Set<CarPart> carParts;
public DOMParserFile(InputStream xmlFile, InputStream xsdFile) {
this.inputXML = xmlFile;
this.inputXSD = xsdFile;
carParts = new HashSet<CarPart>();
}
public void readFromXMLFile() throws Exception {
if (XMLFileValidator.validateAgainstXSD(inputXML, inputXSD)) {
DocumentBuilderFactory builderFactory = DocumentBuilderFactory
.newInstance();
DocumentBuilder builder = builderFactory
.newDocumentBuilder();
Document doc = builder.parse(inputXML);
// get the carPart nodes
NodeList carPartList = doc.getElementsByTagName("carPart");
// store car parts into a list
for (int i = 0; i < carPartList.getLength(); i++) {
// build new car part object
CarPart carPart = new CarPart();
Node carPartNode = carPartList.item(i);
if (carPartNode.getNodeType() == Node.ELEMENT_NODE) {
Element elem = (Element) carPartNode;
// set id
carPart.setId(elem.getElementsByTagName("id").item(0)
.getTextContent());
// set name
carPart.setName(elem.getElementsByTagName("name").item(0)
.getTextContent());
// set description
carPart.setDescription(elem
.getElementsByTagName("description").item(0)
.getTextContent());
// set quantity
carPart.setQuantity(Integer.valueOf(elem
.getElementsByTagName("quantity").item(0)
.getTextContent()));
// set manufacturer
carPart.setPartManufact(elem
.getElementsByTagName("partManufacturer").item(0)
.getTextContent());
// set price
carPart.setPrice(Double.valueOf(elem
.getElementsByTagName("price").item(0)
.getTextContent()));
// get the list of available vehicles
NodeList vehicleNodeList = ((Element) carPartNode)
.getElementsByTagName("availableFor");
Set<Vehicle> availableVehicles = new HashSet<Vehicle>();
for (int j = 0; j < vehicleNodeList.getLength(); j++) {
Vehicle vehicle = new Vehicle();
Node vehicleNode = vehicleNodeList.item(j);
if (vehicleNode.getNodeType() == Node.ELEMENT_NODE) {
Element vehicleELement = (Element) vehicleNode;
// set vehicle's make
vehicle.setMake(vehicleELement
.getElementsByTagName("make").item(0)
.getTextContent());
// set vehicle's model
vehicle.setModel(vehicleELement
.getElementsByTagName("model").item(0)
.getTextContent());
// get the available list of years of fabrication
// for
// this vehicle
NodeList yearsList = ((Element) vehicleNode)
.getElementsByTagName("fabricationYear");
Set<Integer> years = new HashSet<Integer>();
for (int k = 0; k < yearsList.getLength(); k++) {
Node yearNode = yearsList.item(k);
if (yearNode.getNodeType() == Node.ELEMENT_NODE) {
Element yearElem = (Element) yearNode;
years.add(Integer.valueOf(yearElem
.getAttribute("yearAttr")));
}
}
vehicle.setFabYears(years);
availableVehicles.add(vehicle);
}
}
carPart.setVehicles(availableVehicles);
}
carParts.add(carPart);
}
}
}
public void printCarParts(){
for(CarPart p :carParts){
p.output();
}
}
XMLFileValidator类
public class XMLFileValidator {
public static boolean validateAgainstXSD(InputStream xmlFile, InputStream xsdFile)
{
try
{
SchemaFactory factory =
SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = factory.newSchema(new StreamSource(xsdFile));
Validator validator = schema.newValidator();
validator.validate(new StreamSource(xmlFile));
System.out.println("The XML file IS valid");
return true;
}
catch(Exception ex)
{
System.out.println("The XML file is NOT valid");
System.out.println("Reason: " + ex.getLocalizedMessage());
ex.printStackTrace();
return false;
}
}
}
主类
public class Main {
public static void main(String args[]){
try {
InputStream inXML = Main.class.getResourceAsStream("/xml/carParts.xml");
InputStream inXSD = Main.class.getResourceAsStream("/xml/carPartsWarehouse.xsd");
//1. dom parsing method
System.out.println("**********************DOM PARSING METHOD************************");
DOMParserFile dom = new DOMParserFile(inXML,inXSD);
dom.readFromXMLFile();
dom.printCarParts();
//2. sax parsing method
System.out.println("***********************SAX PARSING METHOD*************************");
SAXParserFile sax = new SAXParserFile(inXML,inXSD);
sax.readDataFromXml();
sax.printCarParts();
//3. stax parsing method
System.out.println("***********************StAX PARSING METHOD*************************");
StAXParserFile stax = new StAXParserFile(inXML,inXSD);
stax.readFromXml();
stax.printCarParts();
} catch (URISyntaxException e1) {
e1.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
这些并不是真正的file
,它们是嵌入式资源。
您可以手动打开它们,因为.jar
是.zip
文件,其中资源是文件。但这不是一种处理它们的好方法。
但是,您可以将其打开为stream
。所以:
InputStream s = Main.class.getResourceAsStream("/xml/carParts.xml");
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(s);
//process document
我有一个资源文件夹/包在我的项目的根,我"不"想要加载某个文件。如果我想加载某个文件,我会使用class.getResourceAsStream,我会没事的!!我实际上想做的是在资源文件夹中加载一个“文件夹”,循环该文件夹中的文件,并获得每个文件的流,并在内容中读取...假设在运行时之前没有确定文件名...那我该怎么办?有没有一种方法来获得一个文件夹中的文件列表在您的jar文件?请注意,带有资源的
问题内容: 嗨,我已经将我的Java项目导出为可执行jar文件。在我的项目中,我正在访问包含一些数据的Excel文件。现在,当我尝试访问Excel文件时,我将无法访问它。 我的项目结构是: Java_Project_Folder -src_Folder -resources_Folder(包含Excel文件) 我正在像访问Excel文件 我尝试使用以下方式访问此文件: 但是我进入的是空异常。有什么
但我进的是空异常。有什么问题,有人能帮忙吗?
问题内容: 我有一个带有工具栏的Java项目,该工具栏上带有图标。这些图标存储在名为resources /的文件夹中,因此路径可能是“ resources / icon1.png”。该文件夹位于我的src目录中,因此在编译后,该文件夹将被复制到bin / 我正在使用以下代码访问资源。 (imageName将为“ resources / icon1.png”等)。在Eclipse中运行时,效果很好。
问题内容: 我正在尝试从作为桌面应用程序运行的单独jar中访问jar文件中的XML文件。我可以获取所需文件的URL,但是当我将其传递给FileReader(作为字符串)时,我得到了FileNotFoundException,上面写着“文件名,目录名或卷标语法不正确”。 作为参考,我毫不费力地从同一个jar中读取图像资源,并将URL传递给ImageIcon构造函数。这似乎表明我用来获取URL的方法是
问题内容: 我在项目的根目录中有一个资源文件夹/程序包,我“不想”加载某个文件。如果我想加载某个文件,我将使用class.getResourceAsStream,我会很好的!我实际上想要做的是在资源文件夹中加载一个“文件夹”,循环访问该文件夹中的文件,并获取每个文件的流,并读取内容…假设在运行时之前未确定文件名… 我该怎么办?有没有一种方法可以获取jar文件中“文件夹”中文件的列表?请注意,带有资