Вступление
Сохранить строку в файлы можно несколькими способами с помощью 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