我一直在寻找好几个小时,在所有类型的论坛上查看以前的问题,但我仍然没有让它发挥作用。
我有一种俄罗斯方块游戏(它使用的是五联骨牌而不是四联骨牌)。 我想保存一个高分榜单。 我的jar文件在同一文件夹中有一个文本文件(我从eclipse导出的项目), 我希望能够从这个文件中读取几行(字符串和整数),并且我想在程序结束时覆盖文件中的数据。
我遇到了文件路径的大问题,并使其在不同的目录中工作......
我将不胜感激任何帮助!提前谢谢
答案 0 :(得分:0)
您应该将数据保存到appdata空间,不要保存到与jar文件相同的文件夹中。您可以通过调用System.getenv(“APPDATA”)获取此空间的路径。所以程序看起来像这样:
String path = System.getenv("APPDATA") + File.separator + "best_scores.txt";
try (BufferedWriter bw = new BufferedWriter(new FileWriter(path)))
{
for(String s : rowsToSave) {
bw.write(s);
}
}
catch (Exception e)
{
// ...
}
答案 1 :(得分:0)
如果使用绝对路径位置是一个选项,您可以这样做。但是,这不是一个好的做法。
如果JAR的目录位于类路径上,请参阅How to really read text file from classpath in Java。
如果JAR的目录是当前工作目录new File("highscores.txt")
,那么就应该这样做。
您确实需要考虑目标执行环境,并确保使用可移动的东西。
在@ MaKri的回答中,您是否考虑过preferences API等替代格式,这些格式可能比APPDATA
更便携(即非Windows)。
答案 2 :(得分:0)
就我而言,我认为使用MaKri的答案是完美的,
因为高分列表不需要是可移植的。
如果有人获得游戏,他的高分是空的,所以它在appdata创建文件。
如果已经有一个,那么我就读了,我可以打印到它。
我之所以使用PrintWriter和Scanner,只是因为我现在对它们很熟悉。
谢谢你们!