我正在尝试在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。知道它可能发生什么。
答案 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:将文件作为资源加载。