Подтвердить что ты не робот

Как добавить новую строку текста в существующий файл на Java?

Я хотел бы добавить новую строку в существующий файл, не удаляя текущую информацию этого файла. Короче говоря, вот методология, которую я использую в настоящее время:

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();

Проблема с приведенными выше строками заключается в простом стирании всего содержимого моего существующего файла, а затем добавлении нового текста строки.

Я хочу добавить некоторый текст в конец содержимого файла, не стирая и не заменяя что-либо.

4b9b3361

Ответ 1

вам нужно открыть файл в режиме добавления, который может быть достигнут с помощью конструктора FileWriter(String fileName, boolean append).

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

должен сделать трюк

Ответ 2

Решение с FileWriter работает, однако у вас нет возможности указывать выходную кодировку, тогда в этом случае будет использоваться кодировка по умолчанию для машины, и это обычно не UTF-8!

Поэтому в лучшем случае используйте FileOutputStream:

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

Ответ 3

Попробуйте: \r\n "

Пример Java 7:

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

Ответ 4

Начиная с Java 7:

Определите путь и строку, содержащую разделитель строк в начале:

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

а затем вы можете использовать один из следующих способов:

  • Использование Files.write (небольшие файлы):

    try {
        Files.write(p, s.getBytes(), StandardOpenOption.APPEND);
    } catch (IOException e) {
        System.err.println(e);
    }
    
  • Использование Files.newBufferedWriter (текстовые файлы):

    try (BufferedWriter writer = Files.newBufferedWriter(p, StandardOpenOption.APPEND)) {
        writer.write(s);
    } catch (IOException ioe) {
        System.err.format("IOException: %s%n", ioe);
    }
    
  • Использование Files.newOutputStream (совместимо с API java.io):

    try (OutputStream out = new BufferedOutputStream(Files.newOutputStream(p, StandardOpenOption.APPEND))) {
        out.write(s.getBytes());
    } catch (IOException e) {
        System.err.println(e);
    }
    
  • Использование Files.newByteChannel (файлы произвольного доступа):

    try (SeekableByteChannel sbc = Files.newByteChannel(p, StandardOpenOption.APPEND)) {
        sbc.write(ByteBuffer.wrap(s.getBytes()));
    } catch (IOException e) {
        System.err.println(e);
    }
    
  • Использование FileChannel.open (файлы с произвольным доступом):

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

Подробности об этих методах можно найти в учебнике Oracle.

Ответ 5

Если вы ищете метод вырезания и вставки, который создает и записывает в файл, здесь я написал, что просто берет ввод строки. Удалите 'true' из PrintWriter, если вы хотите каждый раз перезаписывать файл.

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();
        }
    }
}

Ответ 6

Вы можете использовать конструктор FileWriter(String fileName, boolean append), если вы хотите добавить данные в файл.

Измените код следующим образом:

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

Из файла FileWriter javadoc:

Создает объект FileWriter, если имя файла. Если второй аргумент true, то байты будут записаны в конец файла, а не начало.

Ответ 7

В строке 2 измените new FileWriter(my_file_name) на new FileWriter(my_file_name, true), чтобы вы добавляли к файлу, а не перезаписывали.