2011-03-09 4 views
2

Je suis nouveau à Java et en essayant d'enregistrer une chaîne multiligne dans un fichier texte.Java enregistrer la chaîne multiligne au fichier texte

À l'heure actuelle, cela fonctionne dans mon application. Par exemple, si je sauvegarde le fichier de mon application puis l'ouvre à partir de mon application, il place un espace entre les lignes. Cependant, si je sauvegarde le fichier depuis mon application, puis l'ouvre dans le Bloc-notes, tout est sur une ligne.

Existe-t-il un moyen de faire apparaître une ligne multiple sur tous les programmes? Voici mon code actuel:

public static void saveFile(String contents) { 

    // Get where the person wants to save the file 
    JFileChooser fc = new JFileChooser(); 

    int rval = fc.showSaveDialog(fc); 

     if(rval == JFileChooser.APPROVE_OPTION) { 

      File file = fc.getSelectedFile(); 

      try { 
       //File out_file = new File(file); 
       BufferedWriter out = new BufferedWriter(new FileWriter(file)); 
       out.write(contents); 
       out.flush(); 
       out.close(); 
      } catch(IOException e) { 
       messageUtilities.errorMessage("There was an error saving your file. IOException was thrown.", "File Error"); 
      } 
     } 

     else { 
      // Do nothing 
      System.out.println("The user choose not to save anything"); 
     } 
} 
+0

Qu'est-ce qu'un tour? – Daniel

+0

@Daniel je voulais dire "app". Le wordpad –

Répondre

4

selon la façon dont vous construisez votre chaîne, vous pouvez simplement exécuter un problème de fin de ligne. Le bloc-notes ne prend pas en charge les fins de ligne unix (\ n uniquement) il ne prend en charge que les fins de ligne Windows (\ n \ r). essayez d'ouvrir votre fichier sauvegardé en utilisant un éditeur plus robuste, et/ou assurez-vous d'utiliser les fins de ligne appropriées pour votre plate-forme. La propriété système de java (System.getProperty ("line.separator")) vous donnera la bonne fin de ligne pour la plate-forme sur laquelle le code est exécuté.

pendant que vous construisez votre chaîne à enregistrer dans le fichier, plutôt que de spécifier explicitement "\ n" ou "\ n \ r" (ou sur le mac "\ r") pour vos fins de ligne, vous Ajoutez à la place la valeur de cette propriété système.

comme ceci:

String eol = System.getProperty("line.separator"); 

... somewhere else in your code ... 

String texttosave = "Here is a line of text." + eol; 

... more code.. optionally adding lines of text ..... 
// call your save file method 
saveFile(texttosave); 
+0

serait un "éditeur plus robuste" dans cette situation. Vous pouvez également utiliser un programme comme unix2dos pour changer les fins de ligne afin que le bloc-notes les reconnaisse. –

+0

Okay. Je ne sais pas vraiment comment l'appliquer. Comment pourrais-je le faire utiliser le séparateur de ligne droite? –

+0

mise à jour réponse pour expliquer la méthodologie de fin de ligne –

0

Oui comme la réponse précédente mentionne la System.getProperty ("line.seperator"). Votre code ne montre pas comment vous avez créé le contenu de la chaîne, mais puisque vous avez dit que vous étiez nouveau à Java, je pensais que je mentionnerais que dans Java concaténer Strings n'est pas agréable car il crée un. Si vous construisez la chaîne en faisant ceci:

String contents = "" 
contents = contents + "sometext" + "some more text\n" 

considèrent Ensuite, en utilisant à la place java.lang.StrinBuilder

StringBuilder strBuilder = new StringBuilder(); 
strBuilder.append("sometext").append("somre more text\n"); 
... 
String contents = strBuilder.toString(); 

Une autre alternative est de diffuser ce que jamais vous envisagez d'écrire dans un fichier plutôt que de construire une grande chaîne, puis en sortie cela.

+0

Je reçois la chaîne d'une zone de texte. Je fais un programme comme un bloc-notes. –

0

Vous pouvez ajouter quelque chose comme:

si le bloc-notes n'affiche pas correctement
contents = contents.replaceAll("\\n","\\n\\r"); 

. Cependant, vous pourriez rencontrer un problème différent: à chaque sauvegarde/chargement, vous aurez plusieurs caractères. Ensuite, pour éviter cela au chargement, vous devrez appeler le même code ci-dessus mais avec des paramètres inversés. C'est vraiment une solution laide juste pour obtenir le texte à afficher correctement dans le bloc-notes.

0

J'ai eu ce même problème mon ami, après beaucoup de réflexion et de recherche, j'ai même trouvé une solution.

Vous pouvez utiliser ArrayList pour placer tout le contenu de TextArea par exemple, et l'envoyer en paramètre en appelant la sauvegarde, car l'auteur a simplement écrit des lignes de chaîne, puis nous utilisons le "for" ligne par ligne pour écrire notre ArrayList à la fin, nous serons content TextArea dans le fichier txt. si quelque chose n'a pas de sens, je suis désolé est traducteur google et moi qui ne parle pas anglais.

Regardez le bloc-notes de Windows, il ne saute pas toujours les lignes, et affiche tout dans une ligne, utilisez Wordpad ok.


private void SaveActionPerformed (java.awt.event.ActionEvent EVT) {

String NameFile = Name.getText(); 
    ArrayList<String> Text = new ArrayList<String>(); 

    Text.add(TextArea.getText()); 

    SaveFile(NameFile, Text); 
} 

SaveFile public void (String name, ArrayList < Chaîne> Message) {

path = "C:\\Users\\Paulo Brito\\Desktop\\" + name + ".txt"; 

    File file1 = new File(path); 

    try { 

     if (!file1.exists()) { 

      file1.createNewFile(); 
     } 


     File[] files = file1.listFiles(); 


     FileWriter fw = new FileWriter(file1, true); 

     BufferedWriter bw = new BufferedWriter(fw); 

     for (int i = 0; i < message.size(); i++) { 

      bw.write(message.get(i)); 
      bw.newLine(); 
     } 

     bw.close(); 
     fw.close(); 

     FileReader fr = new FileReader(file1); 

     BufferedReader br = new BufferedReader(fr); 

     fw = new FileWriter(file1, true); 

     bw = new BufferedWriter(fw); 

     while (br.ready()) { 

      String line = br.readLine(); 

      System.out.println(line); 

      bw.write(line); 
      bw.newLine(); 

     } 
     br.close(); 
     fr.close(); 

    } catch (IOException ex) { 
     ex.printStackTrace(); 
     JOptionPane.showMessageDialog(null, "Error in" + ex);   
} 
Questions connexes