Вступление
Сохранить строку в файлы можно несколькими способами с помощью Java. В этой статье мы покажем некоторые распространенные методы записи строки в файл.
Вот список всех классов и методов, которые мы рассмотрим:
Files.writeString ()
Начиная с Java 11, Files содержит полезный служебный метод
Files.writeString() . Есть два варианта этого метода. Самая простая
форма требует Path к файлу для записи и текстовое содержимое. Другой
вариант также принимает необязательный CharSet :
Path path = Paths.get("output.txt");
String contents = "Hello";
try {
Files.writeString(path, contents, StandardCharsets.UTF_8);
} catch (IOException ex) {
// Handle exception
}
Здесь мало места для гибкости, но он отлично работает, если вам нужно быстро что-то записать в файл.
Files.write ()
String, как и другие объекты, можно преобразовать в byte[] . Метод
Files.write() работает с байтами:
Path path = Paths.get("output.txt");
String someString = "Hello World";
byte[] bytes = someString.getBytes();
try {
Files.write(path, bytes);
} catch (IOException ex) {
// Handle exception
}
Нет необходимости закрывать какие-либо ресурсы, так как мы сами не открывали никаких ресурсов.
FileWriter
FileWriter - один из самых простых способов записать текстовое
содержимое в файл. Мы создадим File и передадим его в FileWriter
чтобы «связать» их.
Затем мы просто используем FileWriter для записи в него:
File output = new File("output.txt");
FileWriter writer = new FileWriter(output);
writer.write("This text was written with a FileWriter");
writer.flush();
writer.close();
После использования писателя важно очистить и закрыть ресурсы. В
качестве альтернативы вы можете сделать это с помощью синтаксиса
try-with-resources
try(FileWriter writer = new FileWriter("output.txt")) {
writer.write("This text was written with a FileWriter");
}
catch(IOException e){
// Handle the exception
}
BufferedWriter
BufferedWriter - это объект-оболочка, который используется вокруг
объектов типа Writer . Если у нас есть существующий Writer такой как
FileWriter , мы можем обернуть его внутри BuffereWriter .
BufferedWriter лучше всего использовать, когда для файла write() В
этом случае эти многократные записи временно сохраняются во внутренний
буфер и записываются в файл только при наличии достаточного содержимого.
Это позволяет избежать необходимости хранить каждый новый фрагмент
текста в файле и вместо этого предоставляет соответствующий буфер для
временного хранения.
Использование BufferedWriter намного эффективнее, чем FileWriter для
множественной записи, но это не помогает с одной записью.
Фактически, использование BufferedWriter для одной записи приведет к
ненужным накладным расходам. Для таких простых случаев FileWriter -
лучший вариант.
Создадим BufferedWriter :
BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt"));
BufferedWriter и FileWriter расширяют Writer поэтому у них
одинаковые методы:
try(BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt"))) {
writer.write("Written with BufferedWriter);
}
catch(IOException e){
// Handle the exception
}
PrintWriter
PrintWriter позволяет нам форматировать текст перед его записью. Он
содержит методы, к которым мы привыкли, такие как printf() ,
println() и т. Д. Давайте создадим PrintWriter :
File output = new File("output.txt");
PrintWriter writer = new PrintWriter(output);
Лучший способ работать с PrintWriter - использовать синтаксис
try-with-resources
try(PrintWriter writer = new PrintWriter(new FileWriter("output.txt"))) {
// Write using the PrintWriter instance
} catch {
// Handle Exception
}
Когда у нас есть PrintWriter , давайте рассмотрим некоторые из
предоставляемых им методов.
PrintWriter с append ()
PrintWriter , как и StringBuilder предоставляет метод append()
который позволяет нам добавлять содержимое в конец существующего файла.
Давайте appent() некоторый текст в пустой writer :
writer.append("Welcome to my fruit store! From me, you can buy:\n");
writer.append("Apples");
writer.append("\n");
writer.append("Oranges");
writer.append("\n");
writer.append("Bananas");
Метод append() возвращает PrintWriter к которому он был вызван. Это
позволяет append() и упорядочить их более аккуратно:
writer.append("Welcome to my fruit store! From me, you can buy:\n");
writer.append("Apples\n").append("Oranges\n").append("Bananas\n");
PrintWriter с print ()
PrintWriter содержит методы для форматированной печати. К ним
относятся print() , printf() и println() :
writer.print("Welcome to my fruit store %f", 2.0);
writer.printf("From me, you can buy %s and %s.", "apples", "oranges");
PrintWriter с записью ()
С помощью write() мы можем записывать в поток много различных типов
текстового содержимого. Примеры включают массивы символов, строки и
целые числа:
char[] hello = {'H', 'e', 'l', 'l', 'o', '!', '\n'};
writer.write(hello);
writer.write("Welcome to my fruit store\n");
writer.write("From me, you can buy apples and oranges");
Метод write() принимает только контент без параметров форматирования,
поэтому он похож на print() , но не может форматировать строки.
Чтобы завершить каждый PrintWriter в добавлении, печати или записи,
важно очистить и закрыть поток:
writer.flush();
writer.close();
Метод flush() «сбрасывает» содержимое в файл, а close() навсегда
закрывает поток.
Примечание. Если вы используете try-with-resources , он
автоматически очистит и закроет поток.
Заключение
В этой статье мы показали несколько распространенных методов записи строк в файлы. Есть много вариантов, потому что есть много возможных вариантов использования.
Мы рассмотрели Files.writeString() , Files.write() , а также классы
FileWriter , BufferedWriter и PrintWriter