我有一个程序需要从XML-file
获取信息,并且当我在NetBeans中执行时,它正按计划运行。另一方面,当我使用JAR文件并尝试执行相同操作时,我正在捕获IOException
。这是为什么?我正在使用具有绝对路径的字符串:
InputStream in = new FileInputStream(strPath);
doc = db.parse(in);
java.io.FileNotFoundException: kmk (Det går inte att hitta filen)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:146)
at java.io.FileInputStream.<init>(FileInputStream.java:101)
at xmlDom.XMLTolk.skapaTolk(XMLTolk.java:82)
at xmlDom.XMLTolk.<init>(XMLTolk.java:61)
at xmlDom.Kloak.<init>(Kloak.java:46)
at xmlDom.Kloak.main(Kloak.java:123)
这个小程序可以解析XML文件,但是当我创建它的JAR文件时 - 它不起作用。
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.xml.sax.SAXException;
public class XMLTest {
Document d;
public XMLTest() throws ParserConfigurationException, FileNotFoundException, IOException, SAXException {
String docString = "C:\\someXML.xml";
DocumentBuilderFactory dbf;
dbf = DocumentBuilderFactory.newInstance();
dbf.setValidating(true);
dbf.setIgnoringElementContentWhitespace(true);
DocumentBuilder db = dbf.newDocumentBuilder();
InputStream in = new FileInputStream(docString);
d = db.parse(in);
}
public static void main(String[] args) throws ParserConfigurationException, FileNotFoundException, IOException, SAXException {
XMLTest t = new XMLTest();
}
}
答案 0 :(得分:0)
最有可能的原因是你正在尝试读取应用程序类路径中的文件,并且当它打包在jar中时,该项目没有文件系统文件。请改用ClassLoader#getResourceAsStream
。
答案 1 :(得分:0)
使用“java -jar foo.jar”运行时,不会更改当前工作目录。
因此,当您使用相对路径时,它们相对于您当前工作目录的相对路径已经找到,而不是相对于您直观可能期望的jar文件位置。
对于大多数情况,您可以向JVM询问它在哪里找到用于定义给定类的字节,并使用它来获取jar文件的位置,然后可以使用它来定位kmk文件。