2017-03-02 2 views
0

J'essaye de créer un programme de livre de rendez-vous dans Java, cependant le BufferedWriter ne semble pas écrire dans le dossier.Comment obtenir le BufferedWriter pour écrire dans un fichier texte?

Ce code est tout à l'intérieur d'un bloc try { } catch (FileNotFoundException) { } catch (IOException) { }

FileWriter writer = new FileWriter("Appointments" + name + ".txt", true); 
BufferedWriter bufferedWriter = new BufferedWriter(writer); 

if (open == 'o') { 
    FileReader reader = new FileReader("Appointments" + name + ".txt"); 
    BufferedReader bufferedReader = new BufferedReader(reader); 
    while ((line = bufferedReader.readLine()) != null) { 
     if (line.indexOf("one-time") == line.length() - 8) { 
      OneTime o = fromStringOneTime(line); 
      oneTimes.add(o); 
     } 
     if (line.indexOf("daily") == line.length() - 5) { 
      Daily d = fromStringDaily(line); 
      dailys.add(d); 
     } 
     if (line.indexOf("monthly") == line.length() - 7) { 
      Monthly m = fromStringMonthly(line); 
      monthlys.add(m); 
     } 
    } 
} 

La boucle while est juste en cours d'initialisation de toutes les valeurs dans le fichier actuellement en 3 différentes ArrayLists.

J'ai un bloc de code pour créer les nouveaux objets une fois que vous avez sélectionné que vous souhaitez ajouter un rendez-vous (les variables desc et date ont été définies au préalable):

System.out.print("Enter if this is a (o)ne-time, (d)aily, or (m)onthly appointment: "); 
freq = scanner.next().charAt(0); 
if (freq == 'o') { 
    OneTime o = new OneTime(desc, date.getDate()); 
    oneTimes.add(o); 
    totalCount++; 
    bufferedWriter.write(o.toString()); 
    bufferedWriter.newLine(); 
    valid = true; 
} else if (freq == 'd') { 
    Daily o = new Daily(desc, date.getDate()); 
    dailys.add(o); 
    totalCount++; 
    bufferedWriter.write(o.toString()); 
    bufferedWriter.newLine(); 
    valid = true; 
} else if (freq == 'm') { 
    Monthly o = new Monthly(desc, date.getDate()); 
    monthlys.add(o); 
    totalCount++; 
    bufferedWriter.write(o.toString()); 
    bufferedWriter.newLine(); 
    valid = true; 
} 

A la fin de la essayez bloc, j'ai les lignes reader.close() et writer.close(). Alors pourquoi est-ce que quand je vérifie le fichier qu'il devrait enregistrer, il semble toujours vide? C'est la première fois que je travaille sur l'économie de fichiers, donc je ne sais pas pourquoi cela ne fonctionne pas comme prévu.

Edit: fichier va lire maintenant que si l'option a été choisie pour ouvrir un fichier existant au lieu de créer un nouveau

+0

Vous ne pouvez pas lire et écrire dans un fichier en même temps la plupart des systèmes d'exploitation. – EJP

+0

Alors, est-ce que cela fonctionnerait si je fermais juste le lecteur juste après l'avoir utilisé? Parce que j'ai seulement besoin de l'utiliser pour l'initialisation, dans le premier bloc de code que j'ai mis dans mon post. – RoboticPlayer

+0

Pouvez-vous essayer d'écrire dans un fichier avec un nom de fichier différent et le renommer à la fin du programme? – GrabNewTech

Répondre

0

Oui, la plupart du système d'exploitation ne permettra pas de lire et d'écrire le même fichier.. Ainsi, vous pouvez aller avec la solution de contournement en écrivant à un fichier avec un nom de fichier temporaire et renommez-le à l'original à la fin du programme

try { 
    FileWriter writer = new FileWriter("Appointments" + name + "1.txt", true); 
    FileReader reader = new FileReader("Appointments" + name + ".txt"); 
    BufferedReader bufferedReader= new BufferedReader(reader); 
    BufferedWriter bufferedWriter = new BufferedWriter(writer); 
    ....... 
} catch() { 
    ...... 
} finally { 
    bufferedReader.close(); 
    bufferedWriter.flush(); 
    bufferedWriter.close(); 
} 

// Rename the file and delete temp file 
File srcFile = new File("Appointments" + name + "1.txt"); 
File targerFile = new File("Appointments" + name + ".txt"); 
srcFile.renameTo(targetFile); 
srcFile.delete(); 
+0

J'ai essayé, le fichier reste vide. Le deuxième fichier avec le '1' ajouté a été créé, mais je n'ai jamais vu de contenu stocké dedans. – RoboticPlayer

+0

Avez-vous appelé flush() ou close() pour bufferedWriter? – GrabNewTech

+0

Oui, j'ai appelé les deux. – RoboticPlayer