Je veux enregistrer tous les éléments d'un HashMap dans un fichier. Pour ce faire, j'ai écrit le code suivant à l'aide de certaines recherches 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");
            }

    }

Avec final static String CALENDARPATH_STRING = "C:\\Windows\\calendars.dat";. J'ai pensé que je pourrais simplement utiliser le même code mais avec FileOutputStream fos = new FileOutputStream(new File(CALENDARPATH_STRING)); si le fichier n'a pas encore été créé pour en créer un. Malheureusement, cela ne fonctionne pas. C'est le premier moment de faire de telles choses, alors peut-être que vous pouvez m'aider.

0
benicamera 28 juin 2020 à 15:56

2 réponses

Meilleure réponse

Quelques suggestions:

  1. Utilisez File.createNewFile pour créer un nouveau fichier et vérifier son résultat
  2. Utilisez try-with-resources lorsque vous traitez avec des éléments d'E / S (je suppose que vous utilisez> JDK 7). Vous pouvez en savoir plus sur cette fonctionnalité sur le site officiel.

Vous pouvez éviter les duplications:

    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");
    }
1
Ivan Babanin 28 juin 2020 à 13:05

Eh bien, je peux voir qu'il y a un problème avec le chemin de votre fichier CALENDAR_PATH_STRING

Et utilisez new File(CALENDAR_PATH_STRING) cela créerait un nouveau fichier si le fichier particulier n'était pas trouvé. Aussi en local, je peux voir que cela fonctionne.

   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");
      }
  }
0
Sabareesh Muralidharan 28 juin 2020 à 13:12