我有一个非常奇怪的问题。似乎从JAR文件内部加载资源有时会起作用,有时则不起作用。
Jar文件只包含类文件,清单和test.txt
。
当我用Eclipse打包时,它通常运行良好(可以访问test.txt的内容)但在某些目录中,Resourceproblem.class.getResourceAsStream("/test.txt")
返回null
- 尽管它是相同的Jar文件!
例如,当我双击jar文件\\remotecomputer\folder\subfolder\test.jar
时,无法找到jar文件中的test.txt
。但有时(?)路径名称很长并且包含空格(至少在Windows XP SP3上)的情况也是如此。
有什么想法吗?
示例代码:
import java.io.*;
import javax.swing.*;
public class Resourceproblem {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new Resourceproblem();
}
});
}
private Resourceproblem() {
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(500, 500);
frame.setLocationRelativeTo(null);
JTextArea text = new JTextArea();
text.setEditable(false);
frame.add(text);
frame.setVisible(true);
try {
InputStream in = Resourceproblem.class.getResourceAsStream("/test.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String line = br.readLine();
br.close();
in.close();
text.setText(line);
} catch(Exception ex) {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
ex.printStackTrace(pw);
pw.flush();
String s = sw.toString();
pw.close();
ex.printStackTrace();
text.setText(s);
}
}
}
test.txt只是一个文本文件,其中有一行用于检查加载是否成功。
答案 0 :(得分:0)
我有一个想法,但我不相信我知道你的问题是什么。
我使用eclipse多次从你的示例源创建一个jar文件;我使用Win7将jar文件存储在c:\ local和c:\ local \ one \ two三\四中。
我不熟悉在getResourceAsStream()调用中在资源文件名前面使用“/”。您的示例程序在每种情况下都可以使用或不使用“/”,但我建议将其删除,看看是否能解决您的问题。在这种情况下,该文件与访问它的类位于同一目录中。
我原以为“/”会导致程序在文件系统的根目录下查找文件,但这似乎不会发生......