尝试让文件路径在Java / Netbeans中的所有版本中运行

时间:2013-08-23 04:07:26

标签: java file netbeans file-io io

所以我正在开发游戏,我需要帮助我的文件i / o for savefiles。目前我有类似这样的设置来读取它们:

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。&#34;

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

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

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

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

哪个是相对文件路径对吗?我如何解决这个问题,以便无论我在哪里运行文件,我的编译代码都在正确的位置? (让我们说我的朋友想要从他的电脑上运行游戏,除非他把&#34;新文件夹&#34;文件夹放在桌面以外的地方)

1 个答案:

答案 0 :(得分: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");