getClass()。getResource()不适用于.txt文件?

时间:2013-11-17 10:16:14

标签: java file-io executable-jar

背景:我正在编写一个游戏(作为一个可执行的jar),我的游戏的一部分是一个偏好对话框,你可以在其中设置对手名称和影响游戏进展方式的不同变量。我决定如果将它们保存在退出处会很好,所以下次加载应用程序时它会记住你之前设置的内容。

为此,我将变量写入jar中的txt文件,然后在开始新游戏时从中读取。这通过eclipse都可以正常工作,但是当我导出到jar时它根本不起作用。这是我用来读取文件的代码。它位于一个名为“Util”的类中,并在其他地方调用,但我尝试在需要的地方制作非静态方法并使用getClass()而不是Util.class,我仍然没有运气:

public static List<String> getListFromFile()
{
    URI fileUri = null;

    try 
    {
        fileUri = Util.class.getResource("/gameplayPreferences.txt").toURI();
        LoggingDialog.append("\nFileUri is " + fileUri, true);
    } 
    catch (URISyntaxException e) 
    {
        e.printStackTrace();
        LoggingDialog.append(e.toString(), true);
    }

    Path gameplayPreferencesPath = Paths.get(fileUri);
    LoggingDialog.append("\ngameplayPreferencesPath is " + gameplayPreferencesPath, true);
    Charset charset = Charset.forName("US-ASCII");
    try 
    {
        List<String> list = Files.readAllLines(gameplayPreferencesPath, charset);
        return list;
    }
    catch (IOException x) 
    {
        x.printStackTrace();
        LoggingDialog.append(x.toString(), true);
    }

    return null;
}

LoggingDialog是我用来帮助我找出问题所在的地方。在这种情况下,我看到“FileUri是rsrc:gameplayPreferences.txt”并没有进一步,所以我假设当我尝试将其转换为路径时,我会得到一个NPE或类似的东西。

文件gameplayPreferences.txt位于一个名为“resources”的独立资源文件夹中,该文件夹位于我的构建路径的顶部。我不明白的是,我在这里也有图像文件,当我使用getClass()。getResource()来创建图像图标时,这工作正常 - 我可以导出到jar并且所有图像都能正确显示。那么,为什么在导出到jar时对txt文件使用相同的方法中断,我该如何解决?

1 个答案:

答案 0 :(得分:2)

  

为此,我将变量写入jar

中的txt文件

出于这个原因修改jar是不正确的。您需要使用其他东西来存储用户偏好,保存的游戏数据,分数等。

一种方法是使用Preferences API。有关详细信息,请参阅What is the best way to save user settings in java application?