背景:我正在编写一个游戏(作为一个可执行的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文件使用相同的方法中断,我该如何解决?
答案 0 :(得分:2)
为此,我将变量写入jar
中的txt文件
出于这个原因修改jar是不正确的。您需要使用其他东西来存储用户偏好,保存的游戏数据,分数等。
一种方法是使用Preferences API。有关详细信息,请参阅What is the best way to save user settings in java application?。