无法在目录中创建文件 - Java

Can't create file in directory - Java

我想将 HashMap 的所有元素保存在一个文件中。为此,我在一些 google 搜索的帮助下编写了以下代码:

 public void saveCalendars() {
        
        try {FileOutputStream fos = new FileOutputStream(CALENDARPATH_STRING);
                 ObjectOutputStream oos = new ObjectOutputStream(fos);
                for(Calendar elementCalendar : calendarRegister.values()) {
                    oos.writeObject(elementCalendar);
                }
                 oos.close();
                 fos.close();
        } catch (FileNotFoundException e) {
            System.out.println("File not found");
            try {FileOutputStream fos = new FileOutputStream(new File(CALENDARPATH_STRING));
                     ObjectOutputStream oos = new ObjectOutputStream(fos);
                    for(Calendar elementCalendar : calendarRegister.values()) {
                        oos.writeObject(elementCalendar);
                    }
                     oos.close();
                     fos.close();
            } catch (IOException ex) {
                System.out.println("Creating: Error initializing stream");
                }
        } catch (IOException e) {
            System.out.println("Save: Error initializing stream");
            }

    }

final static String CALENDARPATH_STRING = "C:\Windows\calendars.dat";。 我认为我可以简单地使用相同的代码,但如果文件尚未创建则使用 FileOutputStream fos = new FileOutputStream(new File(CALENDARPATH_STRING)); 来创建一个。 不幸的是,它不起作用。第一次做这么省钱的东西,也许你能帮帮我。

一些建议:

  1. 使用File.createNewFile创建一个新文件并验证它的结果
  2. 在处理 IO 内容时使用 try-with-resources(我假设您使用 > JDK 7)。您可以在 official site.
  3. 上阅读有关此功能的更多信息

您可以避免重复:

    File calendarFile = new File(CALENDARPATH_STRING);
    try {
        if(calendarFile.createNewFile()) {
            System.out.println("File not found. New file was created");
        }
    } catch (IOException e) {
        System.out.printf("Can not create file %s\n", CALENDARPATH_STRING);
    }

    try(FileOutputStream fos = new FileOutputStream(calendarFile);
        ObjectOutputStream oos = new ObjectOutputStream(fos)) {
        for(Calendar elementCalendar : calendarRegister.values()) {
            oos.writeObject(elementCalendar);
        }
    } catch (IOException e) {
        System.out.println("Save: Error initializing stream");
    }

嗯,我看到你的文件路径有问题CALENDAR_PATH_STRING

并使用 new File(CALENDAR_PATH_STRING) 如果找不到特定文件,它将创建一个新文件。同样在本地我可以看到它正在工作。

   public void saveCalendars(Map<String, Calendar> calendarRegister) {

     try (FileOutputStream fos = new FileOutputStream(new File(CALENDAR_PATH_STRING)); 
         ObjectOutputStream oos = new ObjectOutputStream(fos)) {
        for (Calendar elementCalendar : calendarRegister.values()) {
            oos.writeObject(elementCalendar);
        }
      } catch (IOException e) {
        System.out.println("Creating: Error initializing stream");
      }
  }