it-swarm.com.de

Wie füge ich einer vorhandenen Java-Datei eine neue Textzeile hinzu?

Ich möchte eine neue Zeile an eine vorhandene Datei anhängen, ohne die aktuellen Informationen dieser Datei zu löschen. Kurz gesagt, hier ist die Methodik, die ich die aktuelle Zeit verwende:

import Java.io.BufferedWriter;
import Java.io.FileWriter;
import Java.io.Writer;

Writer output;
output = new BufferedWriter(new FileWriter(my_file_name));  //clears file every time
output.append("New Line!");
output.close();

Das Problem mit den obigen Zeilen ist einfach, dass sie den gesamten Inhalt meiner vorhandenen Datei löschen und dann den neuen Zeilentext hinzufügen.

Ich möchte einen Text an das Ende des Inhalts einer Datei anhängen, ohne etwas zu löschen oder zu ersetzen.

79
CompilingCyborg

sie müssen die Datei im Anhänge-Modus öffnen, was mit dem Konstruktor FileWriter(String fileName, boolean append) erreicht werden kann.

output = new BufferedWriter(new FileWriter(my_file_name, true));

sollte den Trick machen

117
Mario F

Die Lösung mit FileWriter funktioniert, Sie haben jedoch keine Möglichkeit, die Ausgabecodierung anzugeben. In diesem Fall wird die Standardcodierung für den Computer verwendet, und dies ist normalerweise nicht UTF-8!

Verwenden Sie also am besten FileOutputStream:

    Writer writer = new BufferedWriter(new OutputStreamWriter(
        new FileOutputStream(file, true), "UTF-8"));
24
Danubian Sailor

Versuchen Sie: "\ r\n"

Java 7 Beispiel:

// append = true
try(PrintWriter output = new PrintWriter(new FileWriter("log.txt",true))) 
{
    output.printf("%s\r\n", "NEWLINE");
} 
catch (Exception e) {}
11
Stofkn

Ausgehend von Java 7 :

Definieren Sie einen Pfad und den String, der am Anfang das Zeilentrennzeichen enthält:

Path p = Paths.get("C:\\Users\\first.last\\test.txt");
String s = System.lineSeparator() + "New Line!";

und dann können Sie einen der folgenden Ansätze verwenden:

  1. Mit Files.write (kleine Dateien):

    try {
        Files.write(p, s.getBytes(), StandardOpenOption.APPEND);
    } catch (IOException e) {
        System.err.println(e);
    }
    
  2. Mit Files.newBufferedWriter (Textdateien):

    try (BufferedWriter writer = Files.newBufferedWriter(p, StandardOpenOption.APPEND)) {
        writer.write(s);
    } catch (IOException ioe) {
        System.err.format("IOException: %s%n", ioe);
    }
    
  3. Mit Files.newOutputStream (interoperabel mit Java.io APIs):

    try (OutputStream out = new BufferedOutputStream(Files.newOutputStream(p, StandardOpenOption.APPEND))) {
        out.write(s.getBytes());
    } catch (IOException e) {
        System.err.println(e);
    }
    
  4. Mit Files.newByteChannel (Dateien mit wahlfreiem Zugriff):

    try (SeekableByteChannel sbc = Files.newByteChannel(p, StandardOpenOption.APPEND)) {
        sbc.write(ByteBuffer.wrap(s.getBytes()));
    } catch (IOException e) {
        System.err.println(e);
    }
    
  5. Mit FileChannel.open (Dateien mit wahlfreiem Zugriff):

    try (FileChannel sbc = FileChannel.open(p, StandardOpenOption.APPEND)) {
        sbc.write(ByteBuffer.wrap(s.getBytes()));
    } catch (IOException e) {
        System.err.println(e);
    }
    

Details zu diesen Methoden finden Sie im Oracle-Tutorial .

11

Für den Fall, dass Sie nach einer Methode zum Ausschneiden und Einfügen suchen, die eine Datei erstellt und in diese schreibt, ist hier eine, die ich geschrieben habe und die nur eine Zeichenfolge-Eingabe akzeptiert. Entfernen Sie 'true' von PrintWriter, wenn Sie die Datei jedes Mal überschreiben möchten.

private static final String newLine = System.getProperty("line.separator");

private synchronized void writeToFile(String msg)  {
    String fileName = "c:\\TEMP\\runOutput.txt";
    PrintWriter printWriter = null;
    File file = new File(fileName);
    try {
        if (!file.exists()) file.createNewFile();
        printWriter = new PrintWriter(new FileOutputStream(fileName, true));
        printWriter.write(newLine + msg);
    } catch (IOException ioex) {
        ioex.printStackTrace();
    } finally {
        if (printWriter != null) {
            printWriter.flush();
            printWriter.close();
        }
    }
}
4
MattC

Ändern Sie in Zeile 2 new FileWriter(my_file_name) in new FileWriter(my_file_name, true), damit Sie an die Datei anhängen und nicht überschreiben.

File f = new File("/path/of/the/file");
        try {
            BufferedWriter bw = new BufferedWriter(new FileWriter(f, true));
            bw.append(line);
            bw.close();
        } catch (IOException e) {
            System.out.println(e.getMessage());
        }
3
Tim Niblett

Sie können den Konstruktor FileWriter(String fileName, boolean append) verwenden, wenn Sie Daten an eine Datei anhängen möchten.

Ändern Sie Ihren Code folgendermaßen:

output = new BufferedWriter(new FileWriter(my_file_name, true));

Aus FileWriter Javadoc:

Erstellt ein FileWriter-Objekt unter Angabe eines Dateinamens. Wenn das zweite Argument true ist, werden Bytes an das Ende der Datei und nicht an den Anfang geschrieben.

2
Buhake Sindi