当我尝试在我的代码中加载.txt文件时,我收到此错误:
java.io.FileNotFoundException: file:\C:\Users\Me\Desktop\Program.jar!\test\foo.txt (The filename, directory name, or volume label syntax is incorrect)
我加载这些文件的代码是:
try {
String path = getClass().getResource(file).getPath();
BufferedReader reader = new BufferedReader(new FileReader(path));
...
} catch(IOException e) {
System.err.println("Could not read file!");
e.printStackTrace();
System.exit(-1);
}
我加载到方法中的字符串是:
foo.txt
即使我已多次检查过,该文件仍存在于该路径中,但我的程序仍无法找到它。为什么Program.jar末尾会出现感叹号?这很重要吗?
感谢所有帮助回答我问题的人。
答案 0 :(得分:1)
如果您在控制台中使用jar启动它,则最好以InputStream
的形式访问资源,并按所需方式处理它。当您输入实际路径(尤其不是相对路径)时 - 您正试图访问 INSIDE jar文件,这是错误的。
这是您问题的近似(伪)代码:
InputStream resource = ClassName.class.getResourceAsStream("/test/foo.txt");
BufferedReader reader = new BufferedReader(new InputStreamReader(resource));
//do some stuff
resource.close();
reader.close();
感叹号是JVM用来记录路径中.jar
文件的分隔符。