2017-05-14 2 views
1

Derzeit verwende ich java.nio.file.File.write(Path, Iterable, Charset), um TXT-Datei zu schreiben. Code ist hier ...Vermeiden Sie zusätzliche neue Zeile, schreiben auf. TXT-Datei

Path filePath = Paths.get("d:\\myFile.txt"); 
    List<String> lineList =Arrays.asList("1. Hello", "2. I am Fine", "3. What about U ?"); 
    Files.write(filePath, lineList, Charset.forName("UTF-8")); 

enter image description here

Aber man mehr (4) Leerzeile erzeugt in der Textdatei. Wie kann ich die vierte Leerzeile vermeiden?

1 | 1. Hello 
2 | 2. I am Fine 
3 | 3. What about U ? 
4 | 
+0

IMHO, es besser ist, das abschließende Newline zu haben, als sie wegzulassen. Siehe zum Beispiel http://stackoverflow.com/questions/729692/why-should-text-files-end-with-a-newline – Henry

+0

Ich habe eine gute Antwort unten. Vielen Dank. @Henry –

Antwort

1

Von javadoc für write: "Jede Zeile ist eine Zeichenfolge und wird in die Datei in der Reihenfolge geschrieben, wobei jede Zeile vom Zeilentrennzeichen der Plattform terminiert wird, wie von der Systemeigenschaft line.separator definiert."

einfachste Art und Weise zu tun, wie Sie wollen:

List<String> lineList =Arrays.asList("1. Hello", "2. I am Fine"); 
String lastLine = "3. What about U ?"; 
Files.write(filePath, lineList, Charset.forName("UTF-8")); 
Files.write(filePath, lastLine.getBytes("UTF-8"), StandardOpenOption.APPEND); 
+0

Scheint, dass dies zwei Dateien erzeugt und die erste (mit zwei Zeilen) durch die letzte (eine Zeile) ersetzt wird. Und schließlich bekomme ich eine Datei mit nur einer Zeile. –

+1

Hoppla ... Ich vergesse, die offene Option hinzuzufügen. Fest. –

+0

Ja! das ist, was ich wollte. Danke vielmals. –

2

überprüfen Files.write der Code, den Sie anrufen:

public static Path write(Path path, Iterable<? extends CharSequence> lines, 
          Charset cs, OpenOption... options) 
     throws IOException 
    { 
     // ensure lines is not null before opening file 
     Objects.requireNonNull(lines); 
     CharsetEncoder encoder = cs.newEncoder(); 
     OutputStream out = newOutputStream(path, options); 
     try (BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(out, encoder))) { 
      for (CharSequence line: lines) { 
       writer.append(line); 
       writer.newLine(); 
      } 
     } 
     return path; 
    } 

Es schafft am Ende jedes Einsatzes neue Linie:

writer.newLine(); 

Die Lösung wird: Daten als byte[] liefern :

Path filePath = Paths.get("/Users/maxim/Appsflyer/projects/DEMOS/myFile.txt"); 
List<String> lineList =Arrays.asList("1. Hello", "2. I am Fine", "3. What about U ?"); 
String lineListStr = String.join("\n", lineList); 
Files.write(filePath, lineListStr.getBytes(Charset.forName("UTF-8"))); 
+0

Oh! Ja, so ist es. Also, wie kann ich diese neue Zeile vermeiden/entfernen? –

+1

@ M.A.Khomeni bitte überprüfen Sie es, ich denke, es ist eine bessere Lösung –

+0

Ja, @Maxim Shoustin es funktioniert gut, danke. Aber ich habe zu viele Zeilen über 500.000 mit je 1100 Char. –

Verwandte Themen