1

所以我正在开发一款游戏,我需要关于我的文件 i/o 以保存文件的帮助。目前我有类似这样的设置可以从他们那里读取:

public static void savesManagementMenu() {
    for (int i = 1; i < 4; i++) {
        fileURL = JRPG.class.getResource("Saves/save" + i + ".txt");
        System.out.println(fileURL);
        if (fileURL != null) {
            saveMenuSaveFile = new File(fileURL.getPath());

            try {
                //System.out.println("File # " + i +" exists.");
                saveMenuSaveFileReader = new FileReader(fileURL.getPath());
                saveMenuFileScanner = new Scanner(saveMenuSaveFileReader);

                saveMenuInfo[i - 1][0] = saveMenuFileScanner.nextLine();
                saveMenuFileScanner.nextLine();
                saveMenuFileScanner.nextLine();
                saveMenuFileScanner.nextLine();
                saveMenuInfo[i - 1][1] = saveMenuFileScanner.nextLine();
                saveMenuInfo[i - 1][2] = saveMenuFileScanner.nextLine();
            } catch (FileNotFoundException ex) {
                Logger.getLogger(JRPG.class.getName()).log(Level.SEVERE, null, ex);
            }
        } else {
            saveMenuInfo[i - 1][0] = null;
        }
    }...

从 Netbeans 使用此方法运行/编译将使应用程序/游戏看起来在“E:\Copy\JRPG\build\classes\jrpg\Saves”中。

当我清理和构建项目并尝试通过命令行运行它时,我得到如下响应:

jar:file:/C:/Users/Adam/Desktop/New%20folder/JRPG.jar!/jrpg/Saves/save1.txt

2013 年 8 月 22 日晚上 11:54:18 jrpg.JRPG savesManagementMenu 严重:null java.io.FileNotFoundException: file:\C:\Users\Adam\Desktop\New%20folder\JRPG.jar !\jrpg\Saves\save1。 txt(文件名、目录名或卷标语法不正确)

游戏只是冻结了。当我运行编译的代码时,我希望它查看的保存文件路径是:C:\Users\Adam\Desktop\New folder\Saves

哪个是相对文件路径?如何解决此问题,以便无论我从哪里运行文件,我的编译代码都可以在正确的位置查找?(假设我的朋友想从他的电脑上运行游戏,除了他把“新文件夹”文件夹放在他的桌面以外的地方)

4

1 回答 1

0

嵌入式资源不是一个File,也不能被视为一个。此外,就输出文件而言,无论如何您都不应该尝试保存在应用程序中......

相反,要么将文件保存到应用程序的相对位置...

File saveMenuSaveFile = new File("./Saves/save" + i + ".txt");

或者到用户主目录...

String userHome = System.getProperty("user.home");
File saveMenuSaveFile = new File(userHome + "/.YouApplicationName/Saves/save" + i + ".txt");
于 2013-08-23T04:12:02.123 回答