制作可在jar中访问的文件夹

时间:2013-03-03 23:00:14

标签: java swing file

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

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)

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

在创建FileOutputStream之前,请检查file.canRead()file.canWrite()返回的内容。

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

类似的东西:

String path = "D:/test";