Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
导出时,FileReader无法从资源文件夹中读取Java_Java_Eclipse_Bufferedreader - Fatal编程技术网

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

导出时,FileReader无法从资源文件夹中读取Java,java,eclipse,bufferedreader,Java,Eclipse,Bufferedreader,我正在制作一个自上而下的射击游戏,但我似乎无法在导出罐子时加载世界 创造一个新世界: world = new World(handler, "res/worlds/world1.txt"); 在世界构造函数中加载世界的: loadWorld(path); loadWorld函数包含以下行: String file = Utils.loadFileAsString(path); 在此基础上,我将把文件的所有内容加载到int[][]数组中,然后继续 在Utils类中,我有以下代码: publi

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

创造一个新世界:

world = new World(handler, "res/worlds/world1.txt");
在世界构造函数中加载世界的:

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中运行时有效,但在导出为可运行Jar文件时无效

在7zip中打开的导出jar文件的图像:

任何帮助都将不胜感激

再加上,
Kerdo K.

您的程序将在放置.jar的目录中搜索worlds文件夹。但是因为worlds文件夹在jar中,所以找不到它。因此,您有以下两种解决方案:

将worlds文件夹移到jar之外 使用如下特殊代码从jar内部加载数据:

InputStream input = World.class.getResourceAsStream("/worlds/world1.txt");
BufferedReader reader = new BufferedReader(new InputStreamReader(input));
如果您只想向其他人发送一个jar文件,那么应该使用第二个选项。但是,如果您使用Steam这样的平台,甚至是一个简单的安装程序,您应该使用第一个选项


请注意,当您选择第二个选项时,如果您将res文件夹设置为源文件夹,则代码可能仅在Eclipse中工作。右键单击res文件夹:Build Path>Use as source folder。

JOptionPane未显示,但是否没有引发IOException?不知何故,我认为与jar相同的目录中没有res/worlds/world1.txt文件。我会根据是否需要更改来决定是否将该文件放在jar中。第二个选项应该与eclipse一起使用。如果成功了,忘记从路径中删除/res。谢谢如下所示:world=newworldhandler,/worlds/world1.txt;确保不要忘记开头的斜杠。这个问题让我很困惑……如果你把资源放在与世界级资源相同的包中,那么初始斜杠就没有必要了。事实上,如果您的.jar文件是模块感知的,那么从Java9开始就需要这样做。