0

我想要一个选项,当用户选择自动登录选项时...我的程序将创建一个文件夹并将文件保存在其中...当程序启动时,它将在其中查找文件夹而不是文件。问题是当我通过 netbeans 运行我的代码时,它运行良好,但是当我通过 jar 运行它时,它找不到任何文件夹。任何人都可以指导我,在运行时创建文件夹并访问它的最佳方法是什么。下来是我的文件编写代码...

private void writeSerializableUserObject(boolean isAutoLogin , boolean isAutoRemember){
    SerializableUser serializeUserObj = new SerializableUser();
    serializeUserObj.setUserEmail(TempSessionUser.getTempUser().getEmail());
    serializeUserObj.setUserPassword(TempSessionUser.getTempUser().getPassword());
    serializeUserObj.setUserName(TempSessionUser.getTempUser().getF_name());
    serializeUserObj.setIsAutoLogin(isAutoLogin);
    if(isAutoRemember){
        serializeUserObj.setIsAutoRemember(true);
    }
    System.out.println("in side method.......");

编辑

    String path = System.getProperty("user.home");
    File file = new File(path+"/user.ser");
    if(!file.exists()){
          file.mkdir();
    }
    try {
        FileOutputStream fileOutPut = new FileOutputStream(file);
        ObjectOutputStream oos;
        try {
            oos = new ObjectOutputStream(fileOutPut);
            oos.writeObject(serializeUserObj);
            oos.flush();
            oos.close();
        } catch (IOException ex) {
            Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, null, ex);
        }//Inner catch statment end

    } catch (FileNotFoundException ex) {
        Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, null, ex);
    }//Outer Catch statment end
}

编辑后它给了我这个例外......在netbeans execution.her uptill HaseebAimal是我的主目录路径

    java.io.FileNotFoundException: C:\Users\HaseebAimal\UserData\user.ser (Access is denied)

    at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(FileOutputStream.java:194)
at java.io.FileOutputStream.<init>(FileOutputStream.java:145)
4

2 回答 2

2

getClass().getResource("/UserData")为您提供类路径中的位置,该位置有时(通常)不是文件系统中的目录。相反,您可能应该选择以下一项或多项:

  • 提示用户保存位置。
  • 使用用户主目录中某些文件或文件夹的默认位置,您可以使用System.getProperty("user.home").
  • 将其保存在当前工作目录中,您可以使用System.getProperty("user.dir").

最后一个选项可能是最糟糕的,除非您知道工作目录将始终是什么,因为您已经以某种方式处理了应用程序的安装。

于 2013-03-03T23:11:56.507 回答
0

在创建之前FileOutputStream检查做什么file.canRead()file.canWrite()返回。

您需要确保应用程序可以写入该位置。如果您无权访问该位置,请尝试将目录更改为您具有写入权限的其他位置。

就像是:

String path = "D:/test";
于 2013-03-03T23:46:56.997 回答