在访问文件的.jar上使用Apple的Jar Bundler

时间:2012-04-09 14:41:14

标签: java file jar io

我有一个大型项目,其中包含一个从文件中读取的类(我在下面附上了一个SSCCE)。一切都按预期工作。但是,当我使用Apple Jar Bundler或Eclipse的“导出到Mac OS X应用程序命令”(these instructions之后)时,它不起作用,我得到java.io.FileNotFoundException

我试图找出为什么我得到这个FileNotFoundException以及如何防止它。我的猜测是Eclipse正在使用自己的类加载器或类似的东西,并且在导出的jar中没有正确调用类加载器,因此app

SSCCE:以下代码在从Eclipse运行时有效,但不能从.appjava -jar或甚至从java readfromfile.ReadFromFile目录执行的bin运行。< / p>

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

1 个答案:

答案 0 :(得分:3)

创建Jar Bundle时,src/...路径可能不存在。

为什么不将文件作为包资源放入,并用以下内容阅读:

Reader r = new InputStreamReader(ReadFromFile.class.getResourceAsStream("file.txt"));
BufferedReader br = new BufferedReader(r);

当然,您必须将文件“file.txt”放在同一个类的包中。