Как правильно записать значение в файл несколько раз
Подскажите, как правильно можно реализовать программу. Мне необходимо записать значение в файл несколько раз. На данном этапе я могу записать один раз и после этого, если я желаю добавить ещё один товар у меня перезаписывается строка. Можно ли сделать через рекурсию и всё в одном классе ?
public class Basket < public void backTovar(String katal) throws IOException < File file = new File("G:/Catalog2.txt"); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter writer = new BufferedWriter(new FileWriter("G:/Catalog2.txt")); String mes = switch (katal) < case "1" ->"Товар Штаны (чёрного цвета) добавлен в корзину"; case "2" -> "Товар Штаны (желтого цвета) добавлен в корзину"; case "3" -> "Товар Майка (белого цвета) добавлен в корзину"; case "4" -> "Товар Майка (чёрного цвета) добавлен в корзину"; case "5" -> "Товар Галстук (розового цвета) добавлен в корзину"; case "6" -> "Товар Галстук (чёрного цвета) добавлен в корзину"; case "7" -> "Товар Часы (белого цвета) добавлен в корзину"; case "8" -> "Товар Часы (серого цвета) добавлен в корзину"; default -> "Неизвестный товар : " + katal; >; System.out.println(mes); writer.write(mes); System.out.println(" would you like add goods? (yes/no) "); /* String result = bufferedReader.readLine(); if(result.equals("yes"))< System.out.println("Input number goods " ); String katal = bufferedReader.readLine(); return backTovar(String katal); >*/ writer.close(); >
Отслеживать
задан 3 апр в 21:10
Igor Kamenyuk Igor Kamenyuk
31 5 5 бронзовых знаков
Ну так прочитай из файла и добавляй к прочитанной строке. Потом её записывай.
3 апр в 21:25
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Чтобы писать в конец файла, не перезаписывая содержимое файла, передайте вторым аргументом флаг append в конструктор FileWriter :
new FileWriter("G:/Catalog2.txt", true)
Отслеживать
ответ дан 3 апр в 21:59
Vadik Sirekanyan Vadik Sirekanyan
8,576 4 4 золотых знака 21 21 серебряный знак 36 36 бронзовых знаков
а есть ли возможность писать второе значение с новой строки, передавая вторым аргументом флаг append?
4 апр в 15:08
Конечно, вы можете писать в файл символ переноса строки \n , там где это вам нужно: writer.write(«\n»); . Либо использовать метод writer.newLine(); , который будет писать нужный перенос строки в зависимости от ОС ( \r\n для Windows или \n для Unix-систем).
4 апр в 15:54
Рекурсия здесь представляется излишней, так как приведёт к повторному переоткрытию/закрытию файла и новой обёртки для потока ввода.
Эффективнее и корректнее было бы передать в качестве аргумента название файла, в который будут сохраняться данные, и использовать обычный цикл.
Также для корректного закрытия ресурсов следует применить try-with-resources , а для работы с консолью достаточно использовать сканер, а не буферизированный поток:
public void backTovar(String fileName) throws IOException < File file = new File(fileName); try (BufferedWriter writer = new BufferedWriter(new FileWriter(file))) < Scanner scanner = new Scanner(System.in); String answer = "yes"; while ("yes".equalsIgnoreCase(answer)) < System.out.println("Input goods ID: "); String katal = scanner.nextLine(); String message = switch (katal) < case "1" ->"Товар Штаны (чёрного цвета) добавлен в корзину"; case "2" -> "Товар Штаны (желтого цвета) добавлен в корзину"; case "3" -> "Товар Майка (белого цвета) добавлен в корзину"; case "4" -> "Товар Майка (чёрного цвета) добавлен в корзину"; case "5" -> "Товар Галстук (розового цвета) добавлен в корзину"; case "6" -> "Товар Галстук (чёрного цвета) добавлен в корзину"; case "7" -> "Товар Часы (белого цвета) добавлен в корзину"; case "8" -> "Товар Часы (серого цвета) добавлен в корзину"; default -> "Неизвестный товар : " + katal; >; System.out.println(message); writer.write(message); writer.newLine(); // добавить новую строку! System.out.println("Would you like to add more goods? (yes/no)"); answer = scanner.nextLine(); > > >
При необходимости добавлять строки в файл при записи, можно установить режим append в конструкторе FileWriter , как указано в ответе выше или даже параметризовать сам метод:
public void backTovar(String fileName, boolean append) throws IOException < File file = new File(fileName); try (BufferedWriter writer = new BufferedWriter(new FileWriter(file, append))) < // . >>
Как создать файл и записать его на Java? Работа с файлами в Java: методы и конструкторы

Все языки программирования высокого уровня (также называемые третьим поколением) позволяют писать программы на языке, аналогичном (хотя и гораздо более простом), чем естественный язык. Программа высокого уровня называется исходным кодом.
Что такое файл в Java?
Файл – это не что иное, как простое хранилище данных на языке Java. Файловая система может реализовывать ограничения для определенных операций, таких как чтение, запись и выполнение. Эти ограничения известны как права доступа.
При чтении файла в Java мы должны знать класс файлов Java. Класс Java File представляет файлы и имена каталогов в абстрактной манере. Класс File имеет несколько методов для работы с каталогами и файлами, таких как создание новых каталогов или файлов, удаление и переименование каталогов или файлов и т. д. Объект File представляет фактический файл / каталог на диске.
Теперь давайте разберемся с различными методами создания файла.
Немного теории по созданию файла в Java
Создать файл в Java можно одним из трех способов, передав в объект File:
- абсолютный путь
- только указать имя файла
- указать относительный путь (в этом случае объект файла пытается найти файлы в корневой директории проекта)
При создании пути к файлу мы должны использовать свойство системы File.separator, чтобы сделать нашу программу платформонезависимой.
Давайте рассмотрим различные способы создания файла в простой Java программе:
| 1234567891011121314151617181920212223242526272829303132333435 | packageua.com.prologistic;importjava.io.File;importjava.io.IOException;publicclassCreateNewFile< //В этом классе представлены способы создания файла в Java publicstaticvoidmain(String[]args)throwsIOException< // получаем разделитель пути в текущей операционной системе StringfileSeparator=System.getProperty(«file.separator»); //создаем абсолютный путь к файлу StringabsoluteFilePath=fileSeparator+»Users»+fileSeparator+»prologistic»+fileSeparator+»file.txt»; File file=newFile(absoluteFilePath); if(file.createNewFile())< System.out.println(absoluteFilePath+» Файл создан»); >else< System.out.println(«Файл «+absoluteFilePath+» уже существует»); //создаем файл только с указанием имени файла file=newFile(«file.txt»); if(file.createNewFile())< System.out.println(«file.txt файл создан в корневой директории проекта»); >elseSystem.out.println(«file.txt файл уже существует в корневой директории проекта»); //создаем файл с указанием относительного пути к файлу StringrelativePath=»tmp»+fileSeparator+»file.txt»; file=newFile(relativePath); if(file.createNewFile())< System.out.println(relativePath+» файл создан в корневой директории проекта»); >elseSystem.out.println(«Файл «+relativePath+» уже существует в директории проекта»); >> |
Когда мы запустим эту программу первый раз, то увидим следующий результат:
Java /Users/prologistic/file.txt Файл создан file.txt файл создан в корневой директории проекта Exception in thread «main» java.io.IOException: No such file or directory at java.io.UnixFileSystem.createFileExclusively(Native Method) at java.io.File.createNewFile(File.java:947) at ua.com.prologistic.CreateNewFile.main(CreateNewFile.java:32)
| 1234567 | /Users/prologistic/file.txtФайлсозданfile.txtфайлсозданвкорневойдиректориипроектаException inthread»main»java.io.IOException:No such file ordirectory at java.io.UnixFileSystem.createFileExclusively(NativeMethod) at java.io.File.createNewFile(File.java:947) at ua.com.prologistic.CreateNewFile.main(CreateNewFile.java:32) |
В том месте, где мы использовали относительный путь, программа бросает IOException, поскольку tmp каталога просто нет в корневой папке проекта. Поэтому метод createNewFile() просто пытается создать файл в корневом каталоге проекта.
Теперь давайте создадим каталог tmp в корне проекта и снова выполнил программу. Вот результат:
| 123 | Файл/Users/prologistic/file.txtужесуществуетФайлfile.txtужесуществуетвдиректориипроектаtmp/file.txtфайлсозданвкорневойдиректориипроекта |
Здесь мы видим, что файл с указанием полного пути уже существует (был создан, когда мы первый раз запускали программу) и не был создан;
файл с указанием только названия уже существует и не был создан;
файл с указанием относительного пути был успешно создан (в первом запуске этого файла не было, так как папки tmp не существовало).
Вот и все, что нужно знать о создании файлов в Java. Следите за обновлениями раздела Java IO.
Методы для создания файла в Java
1. Создайте файл с классом java.io.File
Вам нужно использовать метод File.createNewFile(). Этот метод возвращает логическое значение:
- истина, если файл выполнен.
- false, если файл уже существует или операция по какой-то причине не открывается.
Этот метод также генерирует исключение java.io.IOException, когда он не может создать файл.
Когда мы создаем объект File, передавая имя файла, он может быть с абсолютным путем, или мы можем предоставить только имя файла, или мы можем предоставить относительный путь. Для неабсолютного пути объект File пытается найти файлы в корневом каталоге проекта.
Если мы запустим программу из командной строки, для неабсолютного пути объект File попытается найти файлы из текущего каталога. Экземпляры класса File являются неизменяемыми; то есть, после создания абстрактный путь, представленный объектом File, никогда не изменится.
Теперь давайте рассмотрим небольшой пример и разберемся, как он работает.
File file = new File(«c://temp//testFile1.txt»); //create the file. if (file.createNewFile()) < System.out.println(«File is created!»); >else < System.out.println(«File already exists.»); >//write content FileWriter writer = new FileWriter (file); writer.write(«Test data»); writer.close();
Пожалуйста, обратите внимание, что этот метод будет только создавать файл, но не записывать в него никакого содержимого. Теперь давайте двигаться дальше и рассмотрим следующий метод.
2. Создайте файл с классом java.io.FileOutputStream
Если вы хотите создать новый файл и в то же время, если хотите записать в него некоторые данные, вы можете использовать метод записи FileOutputStream. В Java FileOutputStream является классом потока байтов. Чтобы записать данные в файл, вы должны преобразовать данные в байты, а затем сохранить их в файл.
String data = «Test data»; FileOutputStream out = new FileOutputStream(«c://temp//testFile2.txt»); out.write(data.getBytes()); out.close();
Класс FileOutputStream хранит данные в виде отдельных байтов. Может использоваться для создания текстовых файлов. Файл представляет собой хранилище данных на втором носителе, таком как жесткий диск или компакт-диск. Метод FileOutputStream.write() автоматически создает новый файл и записывает в него содержимое.
3. Создайте файл с помощью Java.nio.file.Files – Java NIO
Files.write() – лучший способ создать файл, и он должен быть вашим предпочтительным подходом в будущем, если вы его еще не используете. Это хороший вариант, потому что нам не нужно беспокоиться о закрытии ресурсов ввода-вывода. Каждая строка представляет собой последовательность символов и записывается в файл последовательно, каждая строка заканчивается разделителем строк платформы.
public static Path createFile(Path path, FileAttribute … attrs) throws IOException
Создает новый и пустой файл, и если файл уже существует, то будет ошибка.
путь – путь для создания файла.
attrs – необязательный список атрибутов файла, устанавливаемых атомарно при создании.
String data = «Test data»; Files.write(Paths.get(«c://temp//testFile3.txt»); data.getBytes()); //or List lines = Arrays.asList(«1st line», «2nd line»); Files.write(Paths.get(«file6.txt»); lines, StandardCharsets.UTF_8, StandardOpenOption.CREATE, StandardOpenOption.APPEND);
Далее, давайте посмотрим на создание временного файла.
4. Java также может создавать временные файлы
Создание временного файла в java может потребоваться во многих сценариях, но в основном это происходит во время модульных тестов, где вы не хотите сохранять результаты. Как только тестовый пример закончен, вас не волнует содержимое файла.
Создание временного файла с использованием java.io.File.createTempFile()
с использованием NIO
Для создания временного файла используются следующие два метода.
1. createTempFile(Path, String, String, FileAttribute … attrs) – создает файл tmp в указанном каталоге.
Вышеуказанный метод принимает четыре аргумента.
Путь -> указать каталог, в котором будет создан файл.
Строка -> чтобы упомянуть префикс имени файла. Используйте ноль, чтобы избежать префикса.
Строка -> чтобы упомянуть суффикс имени файла. т.е. расширение файла. Используйте null, чтобы использовать .tmp в качестве расширения.
attrs -> Это необязательно, чтобы упоминать список атрибутов файла, чтобы установить атомарно при создании файла
Например. Files.createTempFile(path,null, null); – создает временный файл с расширением .tmp по указанному пути
2. createTempFile(String, String, FileAttribute ) – создает временный файл во временном каталоге по умолчанию системы / сервера.
Например: Files.createTempFile (null, null) – создает временный файл во временной папке по умолчанию в системе. В Windows временная папка может быть C: UsersusernameAppDataLocalTemp, где username – ваш идентификатор входа в Windows.
1. Обзор
В этом кратком руководстве мы узнаем, как создать новый файл на Java – сначала с помощью классов Files и Path из NIO, затем классов Java File и FileOutputStream , Google Guava и , наконец, библиотеки Apache Commons IO .
2. Настройка
В примерах мы определим константу для имени файла:
private final String FILE_NAME = «src/test/resources/fileToCreate.txt»;
И мы также добавим шаг очистки, чтобы убедиться, что файл еще не существует перед каждым тестом, и удалить его после каждого запуска теста:
@AfterEach @BeforeEach public void cleanUpFiles()
3. Использование файлов NIO.CreateFile()
Давайте начнем с , используяFiles.CreateFile()метод из пакета Java NIO:
@Test public void givenUsingNio_whenCreatingFile_thenCorrect() throws IOException
Как вы можете видеть, код по-прежнему очень прост; теперь мы используем новый Путь интерфейс вместо старого Файла .
Здесь следует отметить, что новый API хорошо использует исключения. Если файл уже существует, нам больше не нужно проверять код возврата. Вместо этого мы получим исключение FileAlreadyExistsException :
java.nio.file.FileAlreadyExistsException: src/test/resources/fileToCreate.txt at sun.n.f.WindowsException.translateToIOException(WindowsException.java:81)
4. Использование файла.createNewFile()
Давайте теперь посмотрим, как мы можем сделать то же самое с помощьюjava.io.Файлкласс:
@Test public void givenUsingFile_whenCreatingFile_thenCorrect() throws IOException
Обратите внимание, что файл не должен существовать, чтобы эта операция прошла успешно. Если файл действительно существует, то операция create New File() вернет false.
5. Использование FileOutputStream
Другой способ создать новый файл – использоватьjava.io.FileOutputStream :
@Test public void givenUsingFileOutputStream_whenCreatingFile_thenCorrect() throws IOException < try(FileOutputStream fileOutputStream = new FileOutputStream(FILE_NAME))< >>
В этом случае новый файл создается при создании экземпляра объекта FileOutputStream . Если файл с заданным именем уже существует, он будет перезаписан . Если, однако, существующий файл является каталогом или новый файл не может быть создан по какой-либо причине, то мы получим исключение FileNotFoundException .
Кроме того, обратите внимание, что мы использовали оператор try-with-resources , чтобы убедиться, что поток правильно закрыт.
6. Использование гуавы
Решение Guava для создания нового файла также является быстрым однострочным:
@Test public void givenUsingGuava_whenCreatingFile_thenCorrect() throws IOException
7. Использование Apache Commons IO
Библиотека Apache Commons предоставляет Файлы.прикасаться() метод, реализующий то же поведение, что и ” прикасаться “утилита в Linux.
Поэтому он создает новый пустой файл или даже файл и полный путь к нему в файловой системе:
@Test public void givenUsingCommonsIo_whenCreatingFile_thenCorrect() throws IOException
Обратите внимание, что это ведет себя немного иначе, чем в предыдущих примерах: если файл уже существует, операция не завершается неудачно, она просто ничего не делает.
И вот он у нас – 4 быстрых способа создания нового файла на Java.
Конструкторы
В обозначении имен файлов и каталогов помогают различные конструкторы:
- File (File parent, String child) — получим файл из соединения родительского пути и строки дочернего пути:
File parentf1 = new File («c:/MyProgram»);File cldf2 = new File (parentf1, «f2.txt»); System.out.println (cldf2);
- File (String pathname) — увидим файл, представляющий указанное имя пути:
File bestf3 = new File («c:», «MyProgram», «f2.txt»); System.out.println (bestf3);
- File (String parent, String child) –получим экземпляр, образованный из строк родительского и дочернего путей:
File Myfile = new File («c:/», «f2.txt»);System.out.println (Myfile);
- File (URI uri) – конверт из URI файла в абстрактный путь:
String fpath = («c:\MyProgram\superf2.png»);File myf= new File (fpath);URI uri = myf.toURI ();System.out.println (uri.to String());
Методы класса File
Методы могут помочь узнать данные о файлах: размер или дату последних изменений, к какому типу относится. Также с их помощью можно удалить элемент.
Вот распространенные методы:
- boolean createNewFile(): создает новый пустой файл. Если файл не будет создан, тогда выводится false.
- boolean delete(): удаляет каталог или файл.
- boolean exists(): проверяет, существует ли указанный файл или каталог.
- boolean equals(Object obj): проверяет, совпадает ли имя пути с заданным объектом.
- String getName(): выводит название файла или каталога.
- String getParent(): выводит название каталога-родителя.
- boolean isDirectory(): передает абстрактный путь, true — если путь указывает на каталог.
- boolean isFile(): выводит true, если путь указывает на файл.
- boolean isHidden(): проверяет, скрыт файл или нет (если да — выводит true, если нет — false).
- String[] list(): генерация списка строк со всеми именами файлов в каталоге.
- File[] listFiles(): формирование массива и его возврат.
- long length(): предоставляет данные о длине файла.
- URI toURI(): будет создан URI файла.
- boolean setReadable (boolean readable, boolean ownerOnly): устанавливает, кто может читать файл. К примеру, только владелец (owner).
- boolean setReadOnly(): указывает на файл или каталог, для которых возможно только чтение.
Работа с каталогами
В каталоге могут содержаться файлы и даже другие каталоги. Когда нам необходимо узнать, с чем имеем дело, обращаемся к методу isDirectory(). Если это каталог — увидим true. Затем применяем list() для получения детального перечня того, что внутри:
Давайте попробуем придумать новое название и убрать каталог:
File dir = new File («C://MyDir//TestDir»); boolean created = dir.mkdir(); if(created) System.out.println(«Sucсess»); // меняем название File TestDir = new File («C://MyDir//SuperTestDir»); dir.renameTo(TestDir); // убираем каталог boolean deleted = TestDir.delete(); if(deleted) System.out.println(«Removed»);
Работа с файлами
Применяем тот же принцип навигации, что и с каталогами:
File Myf1 = new File(«Programming.txt»); File Myf2 = new File(«Codding.txt»); // проверяем наличие Myf1 и меняем его название if (Myf1.exists()) < if (My1.renameTo(Myf2)) < System.out.println(«Sucсess «); // все ок >else System.out.println(«Not done»); // имя не изменилось > else System.out.println(«Not exist»); >
В Java можно легко управлять файлами, добавлять их, переименовывать и так далее.
Простой пример записи в файл в Java
Перед тем как создавать точку входа в программу, нужно прописать импорты (необходимые классы находятся в библиотеке 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».
Запись бинарной информации в файл
Если вам требуется записать не текстовые данные, а бинарные данные, используйте следующий пример. В качестве бинарных данных может выступать любой массив байтов (например, байтовое представление картинки или любого другого файла).
// запись в файл бинарной информации (файл перезаписывается) byte[] data = «Бинарные данные».getBytes(); Path fileB = Paths.get(«output.bin»); Files.write(fileB, data);
Для того, чтобы добавить информацию в конец файла, не перезаписывая его полностью, ипользуйте этот код:
// запись в файл бинарной информации (информация добавляется в конец файла) byte[] data2 = «Бинарные данные».getBytes(); Path fileB2 = Paths.get(«output.bin»); Files.write(fileB2, data, StandardOpenOption.APPEND);
Запись текста в файл (Java 6)
Этот код запишет данные в файл (причём если файл существует, данные в нём будут перезаписаны).
// если файл существует, он перезатрётся PrintWriter writer = new PrintWriter(«output.txt», «UTF-8»); writer.println(«Первая строка»); writer.println(«Вторая строка»); writer.close();
Если вам нужно дописать текст в конец файла, используйте следующий код:
// здесь мы допишем информацию в конец файла, если он уже существует PrintWriter writer2 = new PrintWriter((new FileWriter(«output.txt», true))); writer2.println(«Третья строка»); writer2.close();
Для записи бинарных данных в файл в Java 6 используйте следующий код (информация в файле перезапишется):
// запись в файл бинарной информации (файл перезаписывается) OutputStream os = new FileOutputStream(«output.bin»); byte[] data = «какие-то бинарные данные».getBytes(); os.write(data); os.close();
Для добавления бинарных в конец файла в Java используйте следующий код:
// запись в файл бинарной информации (информация добавляется в конец файла) OutputStream osB = new FileOutputStream(«output.bin», true); byte[] dataB = «какие-то бинарные данные».getBytes(); osB.write(dataB); osB.close();
- https://java-blog.ru/osnovy/kak-sozdat-fayl-java
- https://javadevblog.com/kak-sozdat-novyj-fajl-v-java.html
- https://javascopes.com/java-how-to-create-a-file-6fed373a/
- https://highload.today/rabota-s-fajlami-v-java-metody-i-konstruktory/
- https://4java.ru/kak-osushchestvit-zapis-v-fayl-v-java
- https://java-lessons.ru/files/write-to-file
Java работа с файлами
Каждое приложение, программа имеют возможности записи чего-либо в файл. В данном уроке я продемонстрирую как можно записать какие-то данные в файл, а потом считать их оттуда.
Какие проблемы мы будем решать в этом уроке?
Подготовительные работы
Создадим простой проект, не обязательно Maven проект, так как нам не потребуется не каких дополнительных библиотек.
После того как вы создали проект, создайте класс WorkInFile.java и напишите туда стандартную конструкцию main:
public static void main(String[] args)< //тут будем вызывать наши методы >
Теперь создадим класс который будет иметь методы для работы с файлами, а назовем его FileWorker.java все методы в нем которые не есть private будут статическими для того чтобы мы получали к ним доступ без экземпляра этого класса.
Как записывать в файл?
В классе FileWorker.java создадим статический метод который будет осуществлять запись в файл и назовем этот метод write(String text; String nameFile):
public static void write(String fileName, String text) < //Определяем файл File file = new File(fileName); try < //проверяем, что если файл не существует то создаем его if(!file.exists())< file.createNewFile(); >//PrintWriter обеспечит возможности записи в файл PrintWriter out = new PrintWriter(file.getAbsoluteFile()); try < //Записываем текст у файл out.print(text); >finally < //После чего мы должны закрыть файл //Иначе файл не запишется out.close(); >> catch(IOException e) < throw new RuntimeException(e); >>
Обратите особое внимание на то, что после записи каких либо данных в файл мы должны его закрыть, только после этого действия данные запишутся в файл.
private static String text = "This new text \nThis new text2\nThis new text3\nThis new text4\n"; private static String fileName = "C://blog/a.txt"; public static void main(String[] args) throws FileNotFoundException < //Запись в файл FileWorker.write(fileName, text); >
После чего мы получим новый файл “a.txt” со следующим содержимым:
This new text This new text2 This new text3 This new text4
2. Как читать файл?
Теперь в классе FileWorker создадим метод для чтения файла, также статический:
public static String read(String fileName) throws FileNotFoundException < //Этот спец. объект для построения строки StringBuilder sb = new StringBuilder(); exists(fileName); try < //Объект для чтения файла в буфер BufferedReader in = new BufferedReader(new FileReader( file.getAbsoluteFile())); try < //В цикле построчно считываем файл String s; while ((s = in.readLine()) != null) < sb.append(s); sb.append("\n"); >> finally < //Также не забываем закрыть файл in.close(); >> catch(IOException e) < throw new RuntimeException(e); >//Возвращаем полученный текст с файла return sb.toString(); >
StringBuilder – в чем разница между обычным String? В том что когда вы в StringBuilder добавляете текст он не пересоздается, а String пересоздает себя.
Также если файла нет то метод выкинет Exception.
Для проверки на существование файла создадим метод, так как нам еще потребуется эта проверка в следующих методах:
private static void exists(String fileName) throws FileNotFoundException < File file = new File(fileName); if (!file.exists())< throw new FileNotFoundException(file.getName()); >>
Теперь проверим его:
private static String text = "This new text \nThis new text2\nThis new text3\nThis new text4\n"; private static String fileName = "C://blog/a.txt"; public static void main(String[] args) throws FileNotFoundException < //Попытка прочитать несуществующий файл FileWorker.read("no_file.txt"); //Чтение файла String textFromFile = FileWorker.read(fileName); System.out.println(textFromFile); >
В первом случае когда файл не существует мы получим это:
Exception in thread "main" java.io.FileNotFoundException: no_file.txt at com.devcolibri.tools.FileWorker.read(FileWorker.java:31)
Во втором случае, мы получим содержимое файла в виде строки. (для этого закомментируйте первый случай)
3. Как обновить файл?
Как такого Update для файлов нет, но способ обновить его есть, для этого можно его перезаписать.
Давайте создадим метод update в классе FileWorker:
public static void update(String nameFile, String newText) throws FileNotFoundException
Тут мы считываем старый файл в StringBuilder после чего добавляем к нему новый текст и записываем опять. Обратите внимание что для этого мы используем наши методы.
В результате обновления файла:
private static String text = "This new text \nThis new text2\nThis new text3\nThis new text4\n"; private static String fileName = "C://blog/a.txt"; public static void main(String[] args) throws FileNotFoundException < //Обновление файла FileWorker.update(fileName, "This new text"); >
мы получим следующее содержание файла “a.txt“:
This new text This new text2 This new text3 This new text4 This new text
4. Как удалить файл?
В тот же наш утилитный класс FileWorker добавим метод delete, он будет очень простым так как у объекта File уже есть метод delete():
public static void delete(String nameFile) throws FileNotFoundException
private static String fileName = "C://blog/a.txt"; public static void main(String[] args) throws FileNotFoundException < //Удаление файла FileWorker.delete(fileName); >
После чего файл будет удален.
20.7. Java – Класс FileWriter, его конструкторы и методы, пример записи и чтения файла
Класс FileWriter наследуется от класса OutputStreamWriter. Класс используется для записи потоков символов.
Конструкторы
Класс FileWriter имеет несколько конструкторов для создания требуемых объектов. Ниже приведен список.
| № | Конструктор и описание |
| 1 | FileWriter(File file) Конструктор создает объект FileWriter для объекта File. |
| 2 | FileWriter(File file, boolean append) Конструктор создает объект FileWriter, заданный объектом File с логическим значением, указывающим, следует ли добавлять записанные данные. |
| 3 | FileWriter(FileDescriptor fd) Конструктор создает объект FileWriter, связанный с данным файловым дескриптором. |
| 4 | FileWriter(String fileName) Конструктор создает объект FileWriter, учитывая имя файла. |
| 5 | FileWriter(String fileName, boolean append) Конструктор создает объект FileWriter с именем файла с логическим значением, указывающим, следует ли добавлять записанные данные. |
Методы
Когда у вас есть объект FileWriter, тогда есть список вспомогательных методов, которые можно использовать для управления файлами.
| № | Метод и описание |
| 1 | public void write(int c) throws IOException Записывает один символ. |
| 2 | public void write(char [] c, int offset, int len) Записывает часть массива символов, начиная с offset, длиной len. |
| 2 | public void write(String s, int offset, int len) Напишите часть строки, начиная со смещения и длины len. |
Пример в Java чтения и записи в текстовый файл
Ниже приведен пример демонстрации класса (FileWriter class) в Java — запись и чтение из файла:
import java.io.*; public class Test < public static void main(String args[])throws IOException < File file = new File("Example.txt"); // Создание файла file.createNewFile(); // Создание объекта FileWriter FileWriter writer = new FileWriter(file); // Запись содержимого в файл writer.write("Это простой пример,\n в котором мы осуществляем\n с помощью языка Java\n запись в файл\n и чтение из файла\n"); writer.flush(); writer.close(); // Создание объекта FileReader FileReader fr = new FileReader(file); char [] a = new char[200]; // Количество символов, которое будем считывать fr.read(a); // Чтение содержимого в массив for(char c : a) System.out.print(c); // Вывод символов один за другими fr.close(); >>
Получим следующий результат:
Это простой пример, в котором мы осуществляем с помощью языка Java запись в файл и чтение из файла
Содержимое созданного текстового файла Example.txt:

Оглавление
- 1. Java – Самоучитель для начинающих
- 2. Java – Обзор языка
- 3. Java – Установка и настройка
- 4. Java – Синтаксис
- 5. Java – Классы и объекты
- 6. Java – Конструкторы
- 7. Java – Типы данных и литералы
- 8. Java – Типы переменных
- 9. Java – Модификаторы
- 10. Java – Операторы
- 11. Java – Циклы и операторы цикла
- 11.1. Java – Цикл while
- 11.2. Java – Цикл for
- 11.3. Java – Улучшенный цикл for
- 11.4. Java – Цикл do..while
- 11.5. Java – Оператор break
- 11.6. Java – Оператор continue
- 12. Java – Операторы принятия решений
- 12.1. Java – Оператор if
- 12.2. Java – Оператор if..else
- 12.3. Java – Вложенный оператор if
- 12.4. Java – Оператор switch..case
- 12.5. Java – Условный оператор (? 🙂
- 13. Java – Числа
- 13.1. Java – Методы byteValue(), shortValue(), intValue(), longValue(), floatValue(), doubleValue()
- 13.2. Java – Метод compareTo()
- 13.3. Java – Метод equals()
- 13.4. Java – Метод valueOf()
- 13.5. Java – Метод toString()
- 13.6. Java – Метод parseInt()
- 13.7. Java – Метод Math.abs()
- 13.8. Java – Метод Math.ceil()
- 13.9. Java – Метод Math.floor()
- 13.10. Java – Метод Math.rint()
- 13.11. Java – Метод Math.round()
- 13.12. Java – Метод Math.min()
- 13.13. Java – Метод Math.max()
- 13.14. Java – Метод Math.exp()
- 13.15. Java – Метод Math.log()
- 13.16. Java – Метод Math.pow()
- 13.17. Java – Метод Math.sqrt()
- 13.18. Java – Метод Math.sin()
- 13.19. Java – Метод Math.cos()
- 13.20. Java – Метод Math.tan()
- 13.21. Java – Метод Math.asin()
- 13.22. Java – Метод Math.acos()
- 13.23. Java – Метод Math.atan()
- 13.24. Java – Метод Math.atan2()
- 13.25. Java – Метод Math.toDegrees()
- 13.26. Java – Метод Math.toRadians()
- 13.27. Java – Метод Math.random()
- 14. Java – Символы
- 14.1. Java – Метод Character.isLetter()
- 14.2. Java – Метод Character.isDigit()
- 14.3. Java – Метод Character.isWhitespace()
- 14.4. Java – Метод Character.isUpperCase()
- 14.5. Java – Метод Character.isLowerCase()
- 14.6. Java – Метод Character.toUpperCase()
- 14.7. Java – Метод Character.toLowerCase()
- 14.8. Java – Метод Character.toString()
- 15. Java – Строки
- 15.1. Java – Метод charAt()
- 15.2. Java – Метод compareTo()
- 15.3. Java – Метод compareToIgnoreCase()
- 15.4. Java – Метод concat()
- 15.5. Java – Метод contentEquals()
- 15.6. Java – Метод copyValueOf()
- 15.7. Java – Метод endsWith()
- 15.8. Java – Метод equals()
- 15.9. Java – Метод equalsIgnoreCase()
- 15.10. Java – Метод getBytes()
- 15.11. Java – Метод getChars()
- 15.12. Java – Метод hashCode()
- 15.13. Java – Метод indexOf()
- 15.14. Java – Метод intern()
- 15.15. Java – Метод lastIndexOf()
- 15.16. Java – Метод length()
- 15.17. Java – Метод matches()
- 15.18. Java – Метод regionMatches()
- 15.19. Java – Метод replace()
- 15.20. Java – Метод replaceAll()
- 15.21. Java – Метод replaceFirst()
- 15.22. Java – Метод split()
- 15.23. Java – Метод startsWith()
- 15.24. Java – Метод subSequence()
- 15.25. Java – Метод substring()
- 15.26. Java – Метод toCharArray()
- 15.27. Java – Метод toLowerCase()
- 15.28. Java – Метод toString()
- 15.29. Java – Метод toUpperCase()
- 15.30. Java – Метод trim()
- 15.31. Java – Метод valueOf()
- 15.32. Java – Классы StringBuilder и StringBuffer
- 15.32.1. Java – Метод append()
- 15.32.2. Java – Метод reverse()
- 15.32.3. Java – Метод delete()
- 15.32.4. Java – Метод insert()
- 15.32.5. Java – Метод replace()
- 16. Java – Массивы
- 17. Java – Дата и время
- 18. Java – Регулярные выражения
- 19. Java – Методы
- 20. Java – Потоки ввода/вывода, файлы и каталоги
- 20.1. Java – Класс ByteArrayInputStream
- 20.2. Java – Класс DataInputStream
- 20.3. Java – Класс ByteArrayOutputStream
- 20.4. Java – Класс DataOutputStream
- 20.5. Java – Класс File
- 20.6. Java – Класс FileReader
- 20.7. Java – Класс FileWriter
- 21. Java – Исключения
- 21.1. Java – Встроенные исключения
- 22. Java – Вложенные и внутренние классы
- 23. Java – Наследование
- 24. Java – Переопределение
- 25. Java – Полиморфизм
- 26. Java – Абстракция
- 27. Java – Инкапсуляция
- 28. Java – Интерфейсы
- 29. Java – Пакеты
- 30. Java – Структуры данных
- 30.1. Java – Интерфейс Enumeration
- 30.2. Java – Класс BitSet
- 30.3. Java – Класс Vector
- 30.4. Java – Класс Stack
- 30.5. Java – Класс Dictionary
- 30.6. Java – Класс Hashtable
- 30.7. Java – Класс Properties
- 31. Java – Коллекции
- 31.1. Java – Интерфейс Collection
- 31.2. Java – Интерфейс List
- 31.3. Java – Интерфейс Set
- 31.4. Java – Интерфейс SortedSet
- 31.5. Java – Интерфейс Map
- 31.6. Java – Интерфейс Map.Entry
- 31.7. Java – Интерфейс SortedMap
- 31.8. Java – Класс LinkedList
- 31.9. Java – Класс ArrayList
- 31.10. Java – Класс HashSet
- 31.11. Java – Класс LinkedHashSet
- 31.12. Java – Класс TreeSet
- 31.13. Java – Класс HashMap
- 31.14. Java – Класс TreeMap
- 31.15. Java – Класс WeakHashMap
- 31.16. Java – Класс LinkedHashMap
- 31.17. Java – Класс IdentityHashMap
- 31.18. Java – Алгоритмы Collection
- 31.19. Java – Iterator и ListIterator
- 31.20. Java – Comparator
- 32. Java – Дженерики
- 33. Java – Сериализация
- 34. Java – Сеть
- 34.1. Java – Обработка URL
- 35. Java – Отправка Email
- 36. Java – Многопоточность
- 36.1. Java – Синхронизация потоков
- 36.2. Java – Межпоточная связь
- 36.3. Java – Взаимная блокировка потоков
- 36.4. Java – Управление потоками
- 37. Java – Основы работы с апплетами
- 38. Java – Javadoc