Ответ 1
вам нужно открыть файл в режиме добавления, который может быть достигнут с помощью конструктора FileWriter(String fileName, boolean append)
.
output = new BufferedWriter(new FileWriter(my_file_name, true));
должен сделать трюк
Я хотел бы добавить новую строку в существующий файл, не удаляя текущую информацию этого файла. Короче говоря, вот методология, которую я использую в настоящее время:
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();
Проблема с приведенными выше строками заключается в простом стирании всего содержимого моего существующего файла, а затем добавлении нового текста строки.
Я хочу добавить некоторый текст в конец содержимого файла, не стирая и не заменяя что-либо.
вам нужно открыть файл в режиме добавления, который может быть достигнут с помощью конструктора FileWriter(String fileName, boolean append)
.
output = new BufferedWriter(new FileWriter(my_file_name, true));
должен сделать трюк
Решение с FileWriter
работает, однако у вас нет возможности указывать выходную кодировку, тогда в этом случае будет использоваться кодировка по умолчанию для машины, и это обычно не UTF-8!
Поэтому в лучшем случае используйте FileOutputStream
:
Writer writer = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(file, true), "UTF-8"));
Попробуйте: \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) {}
Начиная с 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.
Если вы ищете метод вырезания и вставки, который создает и записывает в файл, здесь я написал, что просто берет ввод строки. Удалите '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();
}
}
}
Вы можете использовать конструктор FileWriter(String fileName, boolean append)
, если вы хотите добавить данные в файл.
Измените код следующим образом:
output = new BufferedWriter(new FileWriter(my_file_name, true));
Из файла FileWriter javadoc:
Создает объект FileWriter, если имя файла. Если второй аргумент true, то байты будут записаны в конец файла, а не начало.
В строке 2 измените new FileWriter(my_file_name)
на new FileWriter(my_file_name, true)
, чтобы вы добавляли к файлу, а не перезаписывали.