You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java内存游戏项目:如何配置跨平台的leaderboard.txt文件路径?

问题解答

关于./resources/leaderboard.txt的可行性

./代表当前工作目录——也就是你运行Java程序时所在的文件夹。如果你的MemoryGame是项目根目录,且你每次都是在这个根目录下启动程序(比如用命令行进入MemoryGame后执行java ...),那么这个相对路径是可行的。但要注意:

  • 路径大小写要统一:你的本地绝对路径用了Resources,代码里写的是resources,Windows系统不区分大小写,但其他系统(如Linux/macOS)会区分,建议全小写保持一致。
  • 如果运行程序时的工作目录不是项目根目录(比如在src文件夹下启动),这个路径就会找不到文件。

更稳妥的方案建议

直接操作resources文件夹里的文件其实不太规范,因为这个文件夹通常用来存放只读静态资源,一旦项目打包成JAR包,里面的文件会被嵌入包内,无法用FileWriter修改。针对排行榜这种需要读写的用户数据,推荐两种方式:

1. 保存到项目根目录的独立数据文件夹

创建一个data文件夹放在MemoryGame根目录下,用相对路径访问:

// 确保data文件夹存在,不存在则创建
File dataDir = new File("./data");
if (!dataDir.exists()) {
    dataDir.mkdirs();
}

// 读写排行榜文件
BufferedWriter scoreWrite = new BufferedWriter(new FileWriter("./data/leaderboard.txt"));
BufferedReader scoreRead = new BufferedReader(new FileReader("./data/leaderboard.txt"));

这种方式既保持了相对路径的灵活性,又把用户数据和项目静态资源分开,更符合项目结构规范。

2. 保存到用户主目录

如果希望程序在不同电脑上运行时,数据都能被用户保留,可以把文件存在用户的主目录下:

// 获取用户主目录路径
String userHome = System.getProperty("user.home");
// 创建专属的程序数据文件夹
File gameDir = new File(userHome + "/.memorygame");
if (!gameDir.exists()) {
    gameDir.mkdirs();
}

// 读写文件
String leaderboardPath = gameDir.getAbsolutePath() + "/leaderboard.txt";
BufferedWriter scoreWrite = new BufferedWriter(new FileWriter(leaderboardPath));
BufferedReader scoreRead = new BufferedReader(new FileReader(leaderboardPath));

这种方式不会因为项目位置变动而丢失数据,体验更好。

3. 只读资源的正确读取方式(如果不需要修改)

如果只是读取静态的初始排行榜数据,可以用Java的类路径资源读取方式,这种方式在开发和打包后都能正常工作:

// 从类路径读取资源(resources文件夹下的文件会被放到类路径根目录)
InputStream inputStream = getClass().getResourceAsStream("/leaderboard.txt");
BufferedReader scoreRead = new BufferedReader(new InputStreamReader(inputStream));

但这种方式只能读取,无法写入,适合不需要修改的静态资源。

内容的提问来源于stack exchange,提问作者Derek Kwon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 17:07:29