Как дописать в файл java
Хотя с помощью ранее рассмотренных классов можно записывать текст в файлы, однако они предназначены прежде всего для работы с бинарными потоками данных, и их возможностей для полноценной работы с текстовыми файлами недостаточно. И для этой цели служат совсем другие классы, которые являются наследниками абстрактных классов Reader и Writer .
Запись файлов. Класс FileWriter
Класс FileWriter является производным от класса Writer. Он используется для записи текстовых файлов.
Чтобы создать объект FileWriter, можно использовать один из следующих конструкторов:
FileWriter(File file) FileWriter(File file, boolean append) FileWriter(FileDescriptor fd) FileWriter(String fileName) FileWriter(String fileName, boolean append)
Так, в конструктор передается либо путь к файлу в виде строки, либо объект File, который ссылается на конкретный текстовый файл. Параметр append указывает, должны ли данные дозаписываться в конец файла (если параметр равен true), либо файл должен перезаписываться.
Запишем в файл какой-нибудь текст:
import java.io.*; public class Program < public static void main(String[] args) < try(FileWriter writer = new FileWriter("notes3.txt", false)) < // запись всей строки String text = "Hello Gold!"; writer.write(text); // запись по символам writer.append('\n'); writer.append('E'); writer.flush(); >catch(IOException ex) < System.out.println(ex.getMessage()); >> >
В конструкторе использовался параметр append со значением false — то есть файл будет перезаписываться. Затем с помощью методов, определенных в базовом классе Writer производится запись данных.
Чтение файлов. Класс FileReader
Класс FileReader наследуется от абстрактного класса Reader и предоставляет функциональность для чтения текстовых файлов.
Для создания объекта FileReader мы можем использовать один из его конструкторов:
FileReader(String fileName) FileReader(File file) FileReader(FileDescriptor fd)
А используя методы, определенные в базом классе Reader, произвести чтение файла:
import java.io.*; public class Program < public static void main(String[] args) < try(FileReader reader = new FileReader("notes3.txt")) < // читаем посимвольно int c; while((c=reader.read())!=-1)< System.out.print((char)c); >> catch(IOException ex) < System.out.println(ex.getMessage()); >> >
Также мы можем считывать в промежуточный буфер из массива символов:
import java.io.*; import java.util.Arrays; public class Program < public static void main(String[] args) < try(FileReader reader = new FileReader("notes3.txt")) < char[] buf = new char[256]; int c; while((c = reader.read(buf))>0) < if(c < 256)< buf = Arrays.copyOf(buf, c); >System.out.print(buf); > > catch(IOException ex) < System.out.println(ex.getMessage()); >> >
В данном случае считываем последовательно символы из файла в массив из 256 символов, пока не дойдем до конца файла в этом случае метод read возвратит число -1.
Поскольку считанная порция файла может быть меньше 256 символов (например, в файле всего 73 символа), и если количество считанных данных меньше размера буфера (256), то выполняем копирование массива с помощью метода Arrays.copy. То есть фактически обрезаем массив buf, оставляя в нем только те символы, которые считаны из файла.
Java добавить в файл
Сегодня мы рассмотрим, как добавить файл в java. Добавление Java в файл — это обычная операция ввода-вывода Java. Например, всякий раз, когда мы что-то печатаем в журналы сервера, оно добавляется к существующему файлу.
Java добавить в файл
Мы можем добавить файл в java, используя следующие классы.
- Java добавляет в файл с помощью FileWriter
- Java добавляет содержимое в существующий файл с помощью BufferedWriter
- Добавить текст в файл в Java с помощью PrintWriter
- Добавить в файл в Java с помощью FileOutputStream
Java добавляет в файл с помощью FileWriter
Вот короткая программа для добавления в файл в java с помощью FileWriter. Позже мы рассмотрим полную примерную программу Java для добавления в файл.
File file = new File("append.txt"); FileWriter fr = new FileWriter(file, true); fr.write("data"); fr.close();
Java добавляет содержимое в существующий файл с помощью BufferedWriter
File file = new File("append.txt"); FileWriter fr = new FileWriter(file, true); BufferedWriter br = new BufferedWriter(fr); br.write("data"); br.close(); fr.close();
Добавить текст в файл в java с помощью PrintWriter
Мы также можем использовать PrintWriter для добавления в файл в java.
File file = new File("append.txt"); FileWriter fr = new FileWriter(file, true); BufferedWriter br = new BufferedWriter(fr); PrintWriter pr = new PrintWriter(br); pr.println("data"); pr.close(); br.close(); fr.close();
Добавить в файл в java с помощью FileOutputStream
Вы должны использовать FileOutputStream для добавления данных в файл, когда это необработанные данные, двоичные данные, изображения, видео и т. д.
OutputStream os = new FileOutputStream(new File("append.txt"), true); os.write("data".getBytes(), 0, "data".length()); os.close();
Пример добавления Java в файл
Вот окончательная программа добавления Java в файл, показывающая все различные варианты, которые мы обсуждали выше.
package com.journaldev.files; import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.io.OutputStream; import java.io.PrintWriter; public class JavaAppendToFile < /** * Java append to file example * * @param args */ public static void main(String[] args) < String filePath = "/Users/pankaj/Downloads/append.txt"; String appendText = "This String will be appended to the file, Byte=0x0A 0xFF"; appendUsingFileWriter(filePath, appendText); appendUsingBufferedWriter(filePath, appendText, 2); appendUsingPrintWriter(filePath, appendText); appendUsingFileOutputStream(filePath, appendText); >private static void appendUsingPrintWriter(String filePath, String text) < File file = new File(filePath); FileWriter fr = null; BufferedWriter br = null; PrintWriter pr = null; try < // to append to file, you need to initialize FileWriter using below constructor fr = new FileWriter(file, true); br = new BufferedWriter(fr); pr = new PrintWriter(br); pr.println(text); >catch (IOException e) < e.printStackTrace(); >finally < try < pr.close(); br.close(); fr.close(); >catch (IOException e) < e.printStackTrace(); >> > /** * Use Stream for java append to file when you are dealing with raw data, binary * data * * @param data */ private static void appendUsingFileOutputStream(String fileName, String data) < OutputStream os = null; try < // below true flag tells OutputStream to append os = new FileOutputStream(new File(fileName), true); os.write(data.getBytes(), 0, data.length()); >catch (IOException e) < e.printStackTrace(); >finally < try < os.close(); >catch (IOException e) < e.printStackTrace(); >> > /** * Use BufferedWriter when number of write operations are more * * @param filePath * @param text * @param noOfLines */ private static void appendUsingBufferedWriter(String filePath, String text, int noOfLines) < File file = new File(filePath); FileWriter fr = null; BufferedWriter br = null; try < // to append to file, you need to initialize FileWriter using below constructor fr = new FileWriter(file, true); br = new BufferedWriter(fr); for (int i = 0; i < noOfLines; i++) < br.newLine(); // you can use write or append method br.write(text); >> catch (IOException e) < e.printStackTrace(); >finally < try < br.close(); fr.close(); >catch (IOException e) < e.printStackTrace(); >> > /** * Use FileWriter when number of write operations are less * * @param filePath * @param text * @param noOfLines */ private static void appendUsingFileWriter(String filePath, String text) < File file = new File(filePath); FileWriter fr = null; try < // Below constructor argument decides whether to append or override fr = new FileWriter(file, true); fr.write(text); >catch (IOException e) < e.printStackTrace(); >finally < try < fr.close(); >catch (IOException e) < e.printStackTrace(); >> > >
Это все, что касается добавления в файл в java-программе.
Вы можете проверить больше примеров Java IO в нашем репозитории GitHub.
- Документация по API PrintWriter
- Документация по API FileWriter
- Документ по API BufferedWriter
- Документация по API FileOutputStream
Как добавить текст в существующий файл в Java
В Java вы можете использовать PrintWriter (file, true) для добавления нового содержимого в конец файла, и это позволит сохранить существующий контент и добавить новый контент в конец файла.
import Java.io.*; public class TestClass < public static void main(String[] args) < try < PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("in.txt", true))); // true добавит новые данные out.println("New line append here !!"); out.close(); >catch (IOException e) < System.out.println(e); >> >
Кроме того, с Java 7 вы можете использовать инструкцию try-with-resources. Окончательный блок не требуется для закрытия объявленного ресурса (-ов), потому что он обрабатывается автоматически и также менее подробен.
import Java.io.*; public class TestClass< public static void main(String[] args) < try(PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("in.txt", true)))) < out.println("New line append here !!"); >catch (IOException e) < System.err.println(e); >> >
(Пока оценок нет)
Как записать в файл на Java
Запись данных в файл является одной из ключевых задач, с которыми сталкиваются разработчики во время работы с программами. Это может включать сохранение настроек программы, логов, отчетов, статистических данных, результатов вычислений, обмен данных между разными частями программы или даже между разными программами. Значение записи данных в файл возрастает, когда программа должна работать с большим объемом информации или когда необходимо обеспечить устойчивость данных в случае отключения питания или аварийного завершения работы программы.
На наших курсах Java разработки мы рассматриваем много практических ситуаций и в этой статье тоже покажем на примерах использование классов и методов записи в файл.
В Java существует несколько способов записи данных в файлы, которые подходят для разных ситуаций и требований. В этой статье мы рассмотрим подробно разные методы и классы, которые можно использовать для записи данных в файлы, такие как FileWriter , FileOutputStream , BufferedWriter , метод WriteString() , PrintWriter , DataOutputStream и FileChannel . Каждый из этих подходов имеет свои особенности и преимущества, поэтому детальное изучение этих методов поможет вам выбрать наиболее оптимальный вариант для вашей конкретной задачи.
Класс FileWriter
Класс FileWriter является часто используемым классом для записи текстовых файлов. Вот пример его использования:
import java.io.FileWriter; import java.io.IOException; public class FileWriterExample < public static void main(String[] args) < try < FileWriter writer = new FileWriter("filewriter_example.txt"); writer.write("Это пример записи в файл с помощью класса FileWriter."); writer.close(); >catch (IOException e) < System.out.println("Ошибка записи в файл: " + e.getMessage()); >> >
УВ этом примере мы используем класс FileWriter , который является классом для записи символьных данных в файл. Сначала мы создаем объект FileWriter , казав путь к файлу. Затем мы используем метод write() записи строки в файл. В конце, используем метод close() для закрытия потока записи.
Класс FileOutputStream
Класс FileOutputStream может использоваться для записи байтов в файл. Вот пример записи текста в файл с помощью FileOutputStream :
import java.io.FileOutputStream; import java.io.IOException; public class FileOutputStreamExample < public static void main(String[] args) < try < FileOutputStream fos = new FileOutputStream("fileoutputstream_example.txt"); String text = "Это пример записи в файл с помощью класса FileOutputStream."; byte[] textBytes = text.getBytes(); fos.write(textBytes); fos.close(); >catch (IOException e) < System.out.println("Ошибка записи в файл: " + e.getMessage()); >> >
В примере с классом FileOutputStream мы записываем байты в файл. Создаем объект FileOutputStream , указав путь к файлу. Используя метод write() для записи байтов (превратив строку в массив байтов при помощи метода getBytes() ). Закрываем поток записи, вызывая метод close() .
Класс BufferedWriter
При помощи класса BufferedWriter мы можем записывать текст в файл используя буфер. Это обеспечивает более эффективную запись:
import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; public class BufferedWriterExample < public static void main(String[] args) < try < BufferedWriter writer = new BufferedWriter(new FileWriter("bufferedwriter_example.txt")); writer.write("Это пример записи в файл при помощи класса BufferedWriter."); writer.newLine(); writer.write("Этот метод использует буфер, что делает запись более эффективной."); writer.close(); >catch (IOException e) < System.out.println("Ошибка записи в файл: " + e.getMessage()); >> >
Используя класс BufferedWriter , мы создаем буфер для запису символьних даних в файл. Создаем объект BufferedWriter , передавая ему объект FileWriter . Используем метод write() для записи строки в файл, а потом newLine() для добавления новой строки. В завершении, закрываем поток записи при помощи метода close() .
Метод WriteString()
В Java 11 был введен метод writeString() , который позволяет записывать строки в файл напрямую. Вот пример его использования:
import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; public class WriteStringExample < public static void main(String[] args) < try < String text = "Это пример записи в файл при помощи метода writeString()."; Files.writeString(Path.of("writestring_example.txt"), text); >catch (IOException e) < System.out.println("Ошибка записи в файл: " + e.getMessage()); >> >
В этом примере мы используем статичный метод writeString() класса Files с Java 11. Этот метод позволяет записывать строки в файл без создания дополнительных объектов. Метод принимает два аргумента: пусть к файлу и строку, которую нужно записать.
Класс PrintWriter
Класс PrintWriter позволяет записывать текст в файл с возможностью автоматического пропуска строки:
import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; public class PrintWriterExample < public static void main(String[] args) < try < PrintWriter writer = new PrintWriter(new FileWriter("printwriter_example.txt")); writer.println("Это пример записи в файл при помощи класса PrintWriter."); writer.println("Этот класс позволяет записывать текст с автоматическим пропуском строки."); writer.close(); >catch (IOException e) < System.out.println("Ошибка записи в файл: " + e.getMessage()); >> >
Используя класс PrintWriter , мы можем записывать форматированный текст в файл. Создаем объект PrintWriter , передавая ему объект FileWriter . Используем метод printf() для записи форматированной строки в файл. В завершении, закрываем поток записи при помощи метода close() .
Класс DataOutputStream
Класс DataOutputStream позволяет записывать примитивные типы данных и строки в файл:
import java.io.DataOutputStream; import java.io.FileOutputStream; import java.io.IOException; public class DataOutputStreamExample < public static void main(String[] args) < try < DataOutputStream dos = new DataOutputStream(new FileOutputStream("dataoutputstream_example.txt")); dos.writeInt(42); dos.writeDouble(3.14); dos.writeUTF("Это пример записи в файл при помощи класса DataOutputStream."); dos.close(); >catch (IOException e) < System.out.println("Ошибка записи в файл: " + e.getMessage()); >> >
В примере с классом DataOutputStream мы записываем примитивные данные и строки в бинарный формат. Создаем объект DataOutputStream , передавая ему объект FileOutputStream . Используем методы writeInt() , writeDouble() и writeUTF() для записи разных типов даных в файл. В завершении, закрываем поток записи при помощи метода close() .
Класс FileChannel
Класс FileChannel позволяет записывать данные в Java файл при помощи каналов NIO.
Каналы NIO (New I/O или Non-blocking I/O) – это альтернативный подход к вводу-выводу (I/O) в Java, который был введен в JDK 1.4. Они позволяют делать неблокирующий ввод-вывод, то есть программа может продолжать выполнение других задач, пока выполняется операция ввода-вывода. Это может помочь повысить производительность программ, особенно когда речь идет о сетевом вводе-выводе или работе с большими файлами.
Каналы NIO в Java реализованы с использованием класса FileChannel . Они позволяют обеспечить более низкоуровневый и гибкий контроль над операциями ввода-вывода, а также предоставляют возможность использования дополнительных оптимизаций, таких как отображение файлов в память и передача данных между каналами напрямую (например, между сетевыми сокетами или различными файлами).
Основное отличие между стандартными I/O потоками и каналами NIO заключается в том, что каналы NIO используют буферы для хранения данных, в то время как стандартные потоки работают с потоками байтов или символов непосредственно. Это позволяет реализовать более эффективный и контролируемый обмен данными между каналами и источниками данных.
import java.io.FileOutputStream; import java.io.IOException; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; public class FileChannelExample < public static void main(String[] args) < try < FileOutputStream fos = new FileOutputStream("filechannel_example.txt"); FileChannel channel = fos.getChannel(); ByteBuffer buffer = ByteBuffer.allocate(64); String text = "Это пример записи в файл при помощи класса FileChannel."; buffer.put(text.getBytes()); buffer.flip(); channel.write(buffer); channel.close(); fos.close(); >catch (IOException e) < System.out.println("Ошибка записи в файл: " + e.getMessage()); >>
В примере с классом FileChannel мы используем каналы ввода-вывода для записи данных в файл. Создаем объект FileChannel , открывая файл для записи при помощи метода FileChannel.open() . Используем метод write() для записи байтов в файл (создавая буфер при помощи метода ByteBuffer.wrap() ). Закрываем канал записи, вызвав метод close() .
Выводы
Мы рассмотрели различные способы записи в файл в Java, используя разные классы и методы. Все эти методы имеют свои преимущества и недостатки, поэтому выбор конкретного метода зависит от ваших потребностей и обстоятельств. Обычно для записи текстовых файлов используются классы FileWriter , BufferedWriter или PrintWriter . Если вам нужно записывать бинарные данные, то можно использовать классы FileOutputStream , DataOutputStream или FileChannel . В Java 11 также есть простой и удобный метод writeString() , который позволяет записывать строки напрямую в файл.
После ознакомления с этими методами и классами, можно выбрать наиболее подходящий для вашего проекта и эффективно записывать данные в файлы.
