При написании программ на языке Java рано или поздно встанет необходимость чтения и записи информации в файл. Для этого в языке предусмотрены следующие инструменты для ввода и вывода данных: класс Writer для записи и Reader для чтения. Наследниками этих классов являются классы FileWriter и FileReader, удобные для работы непосредственно с файлами.
Простой пример записи в файл в Java
Перед тем как создавать точку входа в программу, нужно прописать импорты (необходимые классы находятся в библиотеке java.io*, пропишем звездочку, т. к. в дальнейшем понадобятся еще классы из этой библиотеки). Импорт в редакторе должен иметь такой вид:
Вам будет интересно:Стандартные библиотеки C++
import java.io.*;
Затем внутри произвольного класса пишем метод main, в котором в свою очередь создаем экземпляр класса FileWriter и записываем его в переменную write:
FileWriter writer = new FileWriter("text.txt");
При запуске этой программы будет создан файл text.txt в корне проекта. Для того чтобы записать что-нибудь в этот файл, нужно обратиться к методу write() класса Writer, метод write() принимает в качестве аргумента строку, напишем туда что-нибудь:
writer.write("пример записи в файл в Java");
При работе с вводом выводом данных необходимо также учитывать исключительные ситуации по причине того, что мы не всегда знаем, что будет в этих данных. Компилятор не пропустит данный код без специальной конструкции throws Exception, которую нужно вставить в сигнатуре метода main. Также нужно позаботиться о выходе из потока, после метода write() нужно закрыть поток при помощи метода close(). Как должен выглядеть код на этом этапе, показано на рисунке ниже.
При запуске программы в корне проекта появится файл text.txt, в котором будет написано "пример записи в файл в Java". Однако данный пример годится только для ознакомительных целей, чтобы применить его в "боевых" условиях нужно провести небольшой рефакторинг.
Рефакторинг
Первое, что нужно сделать, - заключить код, отвечающий за ввод вывод данных в конструкцию try - catch (так легче управлять исключениями и применять свои исключения). Затем нужно создать отдельную переменную с типом File, куда можно записать адрес и название файла (это удобно, т. к. часто нужно работать с несколькими файлами, их помещают в отдельные переменные и обрабатывают циклом, и только затем результирующая переменная вставляется как параметр в FileWriter).
Также хорошей практикой при работе с потоками ввода/вывода считается использование буфера (класс FileWriter обращается к диску, если данных много это может потребовать много памяти, поэтому разумно манипулировать данными, используя буфер), для этого применяется класс BufferedWriter, а FileWriter записывается в скобки в качестве параметра. Для освобождения буфера вызывается метод flush(), его можно прописать перед методом close(), теперь код будет выглядеть так, как показано ниже.
Как записать Java в файл построчно
Каждый раз при компиляции данного кода в консоли будет перезаписываться одна и та же запись. Как сделать так, чтобы при запуске программы в файл записывалась новая информация построчно? Для этого в первую очередь нужно написать ключевое слово true вторым параметром при создании FileWriter:
BufferedWriter writer = new BufferedWriter(new FileWriter(myFile, true));
Каждый раз при компиляции программа будет записывать в файл строку, которая находится в методе write(), без переноса на следующую строку. В нашем случае получилось так:
пример записи в Java пример записи в Java пример записи в Java
Простой способ переноса строки - это добавление оператора /n к строковому аргументу метода write(), однако такой способ не будет работать в разных операционных системах. Для того чтобы записать файл построчно на различных платформах, нужно использовать метод line.separator класса System. В следующем примере видно, как этот метод записать в переменную lineSeparator, которую потом можно использовать в строковом аргументе метода write():
String lineSeparator = System.getProperty("line.separator");
Окончательно код будет выглядеть так, как показано ниже.
Результат выполнения данного кода будет следующим: в файле text.txt при троекратном запуске программы появятся строки "пример записи в Java".