读取jar中的文件时出错

时间:2017-11-28 17:02:51

标签: java

我正在尝试在java中读取文件,当我通过IDE运行程序时,它可以正常工作,但是当我在执行jar时尝试打开它时,它说该文件不存在。这是失败的代码。

    public class Main {

    public static void main(String[] args) {

            try {
                App app = new App("files/" + "jsonFile.json", printWriter);
                app.runApp();

            } catch (Exception e) {
                logger.error("error", e);
            }
    }   
}




public class App {

public void runApp(){
    File fileDescription = new File("./" + pathDescription);
    StringBuilder allDescription = new StringBuilder();
    try {
            FileReader fr = new FileReader(fileDescription);
            BufferedReader br = new BufferedReader(fr);
            String line = "";
            while ((line = br.readLine()) != null) {
                allDescription.append(line);
            }
            JSONDescription = allDescription.toString();
            fr.close();
            br.close();
    } catch (IOException e) {
            logger.error("Error reading file",e);
    }
}

}

我知道文件存在于jar中,因为我使用jarzilla手动查看了jar。知道它可能发生什么。

3 个答案:

答案 0 :(得分:1)

要访问JAR中的文件,您可以使用类似

的内容
    InputStream stream = ClassInsideTheJar.class.getResourceAsStream("/files/jsonFile.json");
    BufferedReader br  = new BufferedReader(new InputStreamReader(stream));

这假设你的jar的根目录中有一个名为files的文件夹,你可以在里面找到jsonFile.json文件。

答案 1 :(得分:1)

您可以使用以下内容在jar中查找文件:

SELECT substring('RT @John: Hello world! @Peter Hello!', 'RT @(.*):');

Where" ClassInsideTheJar"是罐子里的任何一类。

答案 2 :(得分:1)

在IDE中运行程序时,编译后的代码存在于jar文件系统之外。 IDE编译代码,然后运行该程序,而不构建JAR文件。因此,您的程序找到了该文件,因为该文件仍然存在于文件系统中。

要在JAR中打开文件,您需要使用其他API:将文件作为资源加载。

load file within a jar