这个问题是由一个打字错误或一个无法重现的问题引起的。虽然类似的问题可能是这里的主题,但这个问题的解决方式不太可能对未来的读者有所帮助。
我试图将一个XML文件引用到我的项目中,这样我就可以解析其中的数据。
它被导出为.jar
文件,这意味着我不能使用引用它
BufferedInputStream in = new BufferedInputStream(new FileInputStream("PhillPlugin.xml"));
当我从JDeveloper IDE运行它时,它非常有效
因此,我将上面的行替换为以下行:
BufferedInputStream in = new BufferedInputStream(Class1.class.getResourceAsStream("Resources/PhillPlugin.xml"));
但是当我执行<code>.jar</code>文件时
终端中的java-jar test. jar
java.io.IOException:正在触发流关闭
。
必须使用Streams而不是任何解析XML库来完成它
这是我的文件所在的位置:
我就是这样读的:
基于本文
如果你想试试,下面是代码:
public static void main(String[] args) throws Exception {
/*This is line 21*/ BufferedInputStream in = new BufferedInputStream(Class1.class.getResourceAsStream("Resources/PhillPlugin.xml"));
StringBuilder sb = new StringBuilder();
String genurl=null;
int cp;
while ((cp = in.read()) != -1) {
sb.append((char) cp);
String t = sb.toString();
if(t.contains("</AttributeValuePair>"))
{
String test = sb.toString();
String test1p[]=test.split("<value>|</value>");
genurl=test1p[1];
break;
}
}
System.out.println(genurl);
sb=new StringBuilder();
while ((cp = in.read()) != -1) {
sb.append((char) cp);
String t = sb.toString();
if(t.contains("</AttributeValuePair>"))
{
String test = sb.toString();
String test1p[]=test.split("<value>|</value>");
genurl=test1p[1];
System.out.println(genurl);
break;
}
}
in.close();
}
这是我从终端
正确引用路径后获得的堆栈跟踪
Exception in thread "main" java.io.FileNotFoundException: PhillPlugin.xml (No such file or directory)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at java.io.FileInputStream.<init>(FileInputStream.java:93)
at client.Class1.main(Class1.java:21)
假设JAR文件是以正常方式从项目创建的,该XML文件的正确资源路径将是"/PhillPlugin. xml"
而不是"Resource/PhillPlugin.xml"
。
假设<code>Class1.class</code>在默认包中,并且您使用<code>class::getResourceAsStream</code〕,相对路径<code>“PhillPlugin.xml”</code<也应该可以工作。
使用<code>jar tvf your.jar</code>检查XML文件是否在jar中,以及XML文件的资源路径实际是什么。
(代表问题作者发布;从他们在问题中放置的解决方案中复制)。
更改后我忘记重新部署he. JAR文件了。它现在工作得很好。