我有一个大型项目,其中包含一个从文件读取的类(我在下面附了一个SSCCE)。一切正常。但是,当我使用Apple Jar Bundler或Eclipse的“导出到Mac OS X应用程序命令”(在these instructions之后)时,它不起作用,并且出现了java.io.FileNotFoundException
。
我试图找出为什么得到此FileNotFoundException
以及如何防止它。我的猜测是Eclipse正在使用其自己的类加载器或某些类,并且在导出的jar
中因此未正确调用该类加载器,因此在app
中也未正确调用该类加载器。
SSCCE:以下代码从Eclipse运行时有效,但不能从.app
,java -jar
甚至从java readfromfile.ReadFromFile
目录执行的bin
中运行。
在ReadFromFile.java中:
package readfromfile;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class ReadFromFile {
public static void main(String[] args) {
String filepath = "src/readfromfile/file.txt";
try {
BufferedReader br = new BufferedReader(new FileReader(filepath));
JFrame frame = new JFrame();
frame.getContentPane().setLayout(
new BoxLayout(frame.getContentPane(), BoxLayout.Y_AXIS));
for (String line; (line = br.readLine()) != null;) {
frame.getContentPane().add(new JLabel(line));
}
frame.pack();
frame.setVisible(true);
} catch (FileNotFoundException e) {
System.err.println("File not found");
e.printStackTrace();
} catch (IOException e) {
System.err.println("IOexception");
e.printStackTrace();
}
}
}
在file.txt中:
I am text
最佳答案
创建Jar捆绑包时,也许src/...
路径不存在。
为什么不将文件作为包资源放置,并使用以下命令阅读它:
Reader r = new InputStreamReader(ReadFromFile.class.getResourceAsStream("file.txt"));
BufferedReader br = new BufferedReader(r);
自然地,您必须将文件“ file.txt”放入类的同一包中。