Поскольку автор не указал, требуется ли им решение для версий Java, которые были EoL'd (как Sun, так и IBM, и это технически наиболее распространенные JVM), и из-за того, что большинство людей, кажется, Ответив на вопрос автора, прежде чем было указано, что это текстовый (недвоичный) файл , я решил предоставить свой ответ.
Прежде всего, Java 6 в целом достиг конца срока службы, и, поскольку автор не указал, что ему нужна устаревшая совместимость, я предполагаю, что это автоматически означает Java 7 или выше (Java 7 еще не EoL'd от IBM). Итак, мы можем взглянуть прямо на учебник по вводу / выводу файла: https://docs.oracle.com/javase/tutorial/essential/io/legacy.html
До выпуска Java SE 7 класс java.io.File был
механизм, используемый для файлового ввода-вывода, но он имеет несколько недостатков.
- Многие методы не генерировали исключения, когда они терпели неудачу, так что это было
невозможно получить полезное сообщение об ошибке. Например, если файл
удаление не удалось, программа получит «удалить ошибку», но
не будет знать, если это потому, что файл не существует, пользователь не
есть разрешения, или возникла другая проблема.
- метод переименования
не работает согласованно на разных платформах.
- Реальной поддержки не было
для символических ссылок.
- Требуется дополнительная поддержка метаданных, таких как
права доступа к файлу, владелец файла и другие атрибуты безопасности. Доступ к
метаданные файла были неэффективными.
- Многие методы File не масштабируются.
Запрос большого списка каталогов через сервер может привести к
похмелья. Большие каталоги могут также вызвать проблемы с ресурсами памяти,
в результате чего отказ в обслуживании.
- Не удалось написать
надежный код, который может рекурсивно пройтись по дереву файлов и ответить
соответственно, если бы были круглые символические ссылки.
Ну что ж, это исключает java.io.File. Если файл не может быть записан / добавлен, вы, возможно, не сможете даже знать, почему.
Мы можем продолжить просмотр учебника: https://docs.oracle.com/javase/tutorial/essential/io/file.html#common
Если у вас есть все строки, вы заранее напишите (добавите) в текстовый файл , рекомендуемый подход:
https://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html#write-java.nio.file.Path-java.lang.Iterable-java.nio.charset.Charset-java.nio.file.OpenOption...-
Вот пример (упрощенный):
Path file = ...;
List<String> linesInMemory = ...;
Files.write(file, linesInMemory, StandardCharsets.UTF_8);
Другой пример (приложение):
Path file = ...;
List<String> linesInMemory = ...;
Files.write(file, linesInMemory, Charset.forName("desired charset"), StandardOpenOption.CREATE, StandardOpenOption.APPEND, StandardOpenOption.WRITE);
Если вы хотите записывать содержимое файла по ходу :
https://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html#newBufferedWriter-java.nio.file.Path-java.nio.charset.Charset-java.nio.file.OpenOption...-
Упрощенный пример (Java 8 или выше):
Path file = ...;
try (BufferedWriter writer = Files.newBufferedWriter(file)) {
writer.append("Zero header: ").append('0').write("\r\n");
[...]
}
Другой пример (приложение):
Path file = ...;
try (BufferedWriter writer = Files.newBufferedWriter(file, Charset.forName("desired charset"), StandardOpenOption.CREATE, StandardOpenOption.APPEND, StandardOpenOption.WRITE)) {
writer.write("----------");
[...]
}
Эти методы требуют минимальных усилий со стороны автора и должны быть предпочтительнее всех остальных при записи в [текстовые] файлы.