存储在java中的本地计算机上保存文件的位置

dab*_*oss 2 java

我制作了一个java applet /应用程序游戏,它应该保存用户可以创建到本地计算机的级别.我说applet/application因为它既可以作为应用程序运行,也可以作为applet运行.目前我正在使用它来编写文件:

BufferedWriter bf = new BufferedWriter(new FileWriter("Circles/levels/level.txt"));
for (int i = 0; i < lines.size(); i++) {
    bf.write(lines.get(i));
    bf.newLine();
}
Run Code Online (Sandbox Code Playgroud)

lines是一个arraylist,带有要写入文件的行.

FileReader fr = new FileReader("Circles/levels/level.txt");
        BufferedReader bf = new BufferedReader(fr);
        lines = new ArrayList<String>();
        while (true) {
            String line = bf.readLine();
            if (line == null) {
                break;
            }
            lines.add(line);
        }
        bf.close();
Run Code Online (Sandbox Code Playgroud)

阅读文件.那些被try/catch循环包围,我只是展示我必须拥有的东西.

这可以正常工作,但它似乎是不同操作系统上完全不同的位置,并且应用程序存储在与applet不同的位置.

我想要一种方法来获得一个地方的绝对路径来保存不管java程序运行位置都不会改变的级别,如果你把它作为一个应用程序和一个applet运行它会是一样的.在所有操作系统(linux,windows,mac)上都可以使用它.

Dol*_*000 5

目前在所有的小程序来保存数据没有位置,所以如果你想运行作为applet,你要避免这种情况,很简单.applet沙箱可以完全阻止文件系统访问.您需要在服务器上调用以保存数据.

至于独立应用程序,我很遗憾地说没有完全普遍接受的约定.但是,在Linux,OSX和Windows上,在用户主目录中创建dotfile目录通常被认为是可接受的做法:

public static final File savedir = new File(new File(System.getProperty("user.home")), ".yourgame");
Run Code Online (Sandbox Code Playgroud)

然后,从中导出您的文件名:

FileReader fr = new FileReader(new File(savedir, "level.txt"));
Run Code Online (Sandbox Code Playgroud)

虽然它有效,但它并不完全是Windows程序通常会做的.