Java - 在.jar中使用.txt文件时出错

时间:2015-07-03 13:52:27

标签: java file jar

当我尝试在我的代码中加载.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末尾会出现感叹号?这很重要吗?

感谢所有帮助回答我问题的人。

1 个答案:

答案 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文件的分隔符。