2017-10-26 1 views
2

Ich möchte eine Datei lesen und Text an dieselbe Datei anhängen, basierend auf einigen Kriterien. Das ist mein Code.Lesen und Schreiben in dieselbe Datei - Ausgabeformat ändert sich

public static void writeOutputToFile(ArrayList<String> matchingCriteria) { 

    //Provide the folder which contains the files 
    final File folder = new File("folder_location"); 
    ArrayList<String> writeToFile = new ArrayList<String>(); 

    //For each file in the folder 
    for (final File fileEntry : folder.listFiles()) { 

     try (BufferedReader br = new BufferedReader(new FileReader(fileEntry))) { 
      String readLine = ""; 

      while ((readLine = br.readLine()) != null) { 
       writeToFile.add(readLine); 
      } 

      try (FileWriter fw = new FileWriter(fileEntry); BufferedWriter bw = new BufferedWriter(fw)) { 
       for (String s : writeToFile) { 
        boolean prefixValidation = false; 
        //Check whether each line contains one of the matching criterias. If so, set the condition to true 
        for (String y : matchingCriteria) { 
         if (matchingCriteria.contains(y)) { 
          prefixValidation = true; 
          break; 
         } 
        } 
        //Check if the prefixes available in the string 
        if (prefixValidation) { 
         if (s.contains("name=\"") && !(s.contains("id=\""))) { 
          //Split the filtered string by ' name=" ' 
          String s1[] = s.split("name=\""); 

          /*Some Code*/       
          //Set the final output string to be written to the file 
          String output = "Output_By_Some_Code"; 

          //Write the output to the file. 
          fw.write(output); 

//If this action has been performed, avoid duplicate entries to the file by continuing the for loop instead of going through to the final steps 
           continue; 
          } 
         } 
         fw.write(s); 
         bw.newLine(); 
        }    
        fw.flush(); 
        bw.flush(); 
//Clear the arraylist which contains the current file data to store new file data. 
         writeToFile.clear(); 
        } 
       } catch (IOException ioe) { 
        ioe.printStackTrace(); 
       } 
      } 
    } 

Dieser Code funktioniert einwandfrei. Das Problem ist, dass die Ausgabe nicht genau wie die Eingabedatei ist. Die mehreren Zeilen in der Eingabedatei, an die ich etwas angehängt habe, werden in dieselbe Zeile in der Ausgabedatei geschrieben.

Zum Beispiel füge ich ein ID-Attribut für diese Elemente hinzu und es wird hinzugefügt, aber die Ausgabe wird als eine einzige Zeile geschrieben.

<input type="submit" <%=WebConstants.HTML_BTN_SUBMIT%> value="Submit" /> 
<input type="hidden" name="Page" value="<%=sAction%>" /> 
<input type="hidden" name="FileId" value="" /> 

Meine Frage ist, bin ich etwas falsch, so dass die Formatierung tun wird immer vermasselt?
Wenn ja, gibt es etwas zu tun, um genau wie die Eingabedatei zu drucken?

Eine Hilfe wird sehr geschätzt. Vielen Dank im Voraus :)

+0

kein fix, aber Sie brauchen nicht Ihre, der Leser/Schreiber zu schließen, weil Sie mit 'Try-mit-resources'-Statements – Lino

+0

Dank. Kraft der Gewohnheit :) –

+0

Ist alles in einer einzigen Zeile geschrieben? oder nur ein paar Zeilen? – Lino

Antwort

1

Um Ihr Problem zu lösen, fügen Sie einfach einen zusätzlichen Zeilentrenner (\n) zu jeder Zeile, die Sie schreiben möchten.

So folgt aus: writeToFile.add(readLine); wird dies: writeToFile.add(readLine+"\n");

+0

Danke Lino. Das hat das Problem gelöst :) –