我作为jar导出后,Java无法找到文件

时间:2016-06-02 23:05:38

标签: java eclipse file jar export

为了在我的游戏中加载世界,我的程序会读取文本文件。在Eclipse中一切正常但在导出为可运行的jar后,它再也找不到文本文件了。

这会调用函数从文本文件中读取。

LevelHandler.loadLevel("res/levels/level.txt");

这是函数本身

    public static void loadLevel(String file){
    String level = LevelLoader.loadFileAsString(file);

这是loadFileAsString()函数

public static String loadFileAsString(String file){
    StringBuilder builder = new StringBuilder();
    try {
        @SuppressWarnings("resource")
        BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
        String line;
        while((line = bufferedReader.readLine()) != null){
            builder.append(line + "\n");
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    return builder.toString();
}

此外,它可能值得注意的是,res文件夹永远不会出现在jar中,但里面的levels文件夹却会出现。也许这就是使文件无法找到的原因。我尝试使用此导出但出现了同样的错误。

LevelHandler.loadLevel("levels/level.txt");

2 个答案:

答案 0 :(得分:1)

您正在向文件系统询问导出的jar中的内容。

如果levels文件夹位于导出的jar文件中,则应使用getResourceAsStreamClass提供的ClassLoader来阅读它们。

例如:

InputStream in = LevelLoader.class.getResourceAsStream("/levels/level.txt");

然后在顶部构建BufferedReader

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in));

答案 1 :(得分:0)

尝试这样(假设level / level.txt在jar文件中):

InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("levels/level.txt");
BufferedReader reader= new BufferedReader(new InputStreamReader(is));
String line = null;
while((line = reader.readLine()) != null){
   builder.append(line + "\n");
}