导出时,FileReader无法从资源文件夹Java中读取

时间:2017-07-29 18:47:07

标签: java eclipse bufferedreader

我正在制作一个自上而下的射击游戏,但是当罐子出口时我似乎无法加载这个世界。

创造一个新世界:

world = new World(handler, "res/worlds/world1.txt");

在World构造函数中加载世界:

loadWorld(path);

loadWorld函数包含以下行:

String file = Utils.loadFileAsString(path);

并在其上我将文件的所有内容加载到int [] []数组并继续

在Utils类中我有这段代码:

public static String loadFileAsString(String path) {
    StringBuilder b = new StringBuilder();
    try {
        BufferedReader br = new BufferedReader(new FileReader(path));
        JOptionPane.showMessageDialog(new JFrame(), "File Loaded (Dev testing)");
        String line;
        while((line = br.readLine()) != null)
            b.append(line + "\n");
        br.close();
    } catch(IOException e) {
        e.printStackTrace();
    }

    return b.toString();
}

但它被卡在

BufferedReader br = new BufferedReader(new FileReader(path));

部分,因为JOptionPane窗口没有显示。

在Eclipse中运行时有效,但在导出为Runnable Jar文件时无效。

我导出的jar文件的图像以7zip打开:http://imgur.com/AX240ha

任何帮助将不胜感激!

Regads, Kerdo K。

1 个答案:

答案 0 :(得分:2)

您的程序将在放置.jar的目录中搜索worlds文件夹。但由于worlds文件夹位于jar内,因此无法找到它。所以你有以下两个解决方案:

  • 将世界文件夹移到jar外
  • 使用如下所示的特殊代码从jar内部加载数据:

    InputStream input = World.class.getResourceAsStream("/worlds/world1.txt");
    BufferedReader reader = new BufferedReader(new InputStreamReader(input));
    

如果您只想将一个jar文件发送给其他人,则应该使用第二个选项。但是如果你使用像Steam这样的平台甚至是一个简单的安装程序,你应该使用第一个选项。

请注意,当您选择第二个选项时,如果您将 res 文件夹设为源文件夹(右键单击 res ),则代码可能仅在Eclipse中有效文件夹:构建路径>用作源文件夹)。