Как создать файл и записать его на Java? Работа с файлами в Java: методы и конструкторы

Поток выполнения Java-программы

Выполнение программы Java

Все языки программирования высокого уровня (также называемые третьим поколением) позволяют писать программы на языке, аналогичном (хотя и гораздо более простом), чем естественный язык. Программа высокого уровня называется исходным кодом.

Что такое файл в Java?

Файл – это не что иное, как простое хранилище данных на языке Java. Файловая система может реализовывать ограничения для определенных операций, таких как чтение, запись и выполнение. Эти ограничения известны как права доступа.

При чтении файла в Java мы должны знать класс файлов Java. Класс Java File представляет файлы и имена каталогов в абстрактной манере. Класс File имеет несколько методов для работы с каталогами и файлами, таких как создание новых каталогов или файлов, удаление и переименование каталогов или файлов и т. д. Объект File представляет фактический файл / каталог на диске.

Теперь давайте разберемся с различными методами создания файла.

Немного теории по созданию файла в Java

Создать файл в Java можно одним из трех способов, передав в объект File:

  • абсолютный путь
  • только указать имя файла
  • указать относительный путь (в этом случае объект файла пытается найти файлы в корневой директории проекта)

При создании пути к файлу мы должны использовать свойство системы File.separator, чтобы сделать нашу программу платформонезависимой.

Давайте рассмотрим различные способы создания файла в простой Java программе:

Java <текстареа wrap=»soft» class=»crayon-plain print-no» data-settings=»dblclick» readonly=»» style=»-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;»> package ua.com.prologistic; import java.io.File; import java.io.IOException; public class CreateNewFile { //В этом классе представлены способы создания файла в Java public static void main(String[] args) throws IOException { // получаем разделитель пути в текущей операционной системе String fileSeparator = System.getProperty(«file.separator»); //создаем абсолютный путь к файлу String absoluteFilePath = fileSeparator + «Users» + fileSeparator + «prologistic» + fileSeparator + «file.txt»; File file = new File(absoluteFilePath); if(file.createNewFile()){ System.out.println(absoluteFilePath + » Файл создан»); } else { System.out.println(«Файл » + absoluteFilePath + » уже существует»); //создаем файл только с указанием имени файла file = new File(«file.txt»); if(file.createNewFile()){ System.out.println(«file.txt файл создан в корневой директории проекта»); }else System.out.println(«file.txt файл уже существует в корневой директории проекта»); //создаем файл с указанием относительного пути к файлу String relativePath = «tmp» + fileSeparator + «file.txt»; file = new File(relativePath); if(file.createNewFile()){ System.out.println(relativePath + » файл создан в корневой директории проекта»); }else System.out.println(«Файл » + relativePath + » уже существует в директории проекта»); } }

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 <текстареа wrap=»soft» class=»crayon-plain print-no» data-settings=»dblclick» readonly=»» style=»-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;»> /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 в корне проекта и снова выполнил программу. Вот результат:

Java <текстареа wrap=»soft» class=»crayon-plain print-no» data-settings=»dblclick» readonly=»» style=»-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; font-size: 12px !important; line-height: 15px !important;»> Файл /Users/prologistic/file.txt уже существует Файл file.txt уже существует в директории проекта tmp/file.txt файл создан в корневой директории проекта

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()

Public class TemporaryFileExample{ Public static void main(string[] args){ try{ final path path = Files.createTempFile(«myTempFile»,».txt»); System.out.println(«Temp file : » + path); // delete file on exist. path.toFile().deleteonExit(); } catch (IOException e){ e.printStackTrace(); } } }

с использованием NIO

Public class TemporaryFileExample{ Public static void main(string[] args){ File temp; try{ temp = File.createTempFile(«myTempFile» , «.txt»); System.out.println(«Temp file created : » + temp.getAbsolutePath()); } catch (IOException e){ e.printStackTrace(); } } }

Для создания временного файла используются следующие два метода.

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() { File targetFile = new File(FILE_NAME); targetFile.delete(); }

3. Использование файлов NIO.CreateFile()

Давайте начнем с , используяFiles.CreateFile()метод из пакета Java NIO:

@Test public void givenUsingNio_whenCreatingFile_thenCorrect() throws IOException { Path newFilePath = Paths.get(FILE_NAME); Files.createFile(newFilePath); }

Как вы можете видеть, код по-прежнему очень прост; теперь мы используем новый Путь интерфейс вместо старого Файла .

Здесь следует отметить, что новый 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 { File newFile = new File(FILE_NAME); boolean success = newFile.createNewFile(); assertTrue(success); }

Обратите внимание, что файл не должен существовать, чтобы эта операция прошла успешно. Если файл действительно существует, то операция 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 { com.google.common.io.Files.touch(new File(FILE_NAME)); }

7. Использование Apache Commons IO

Библиотека Apache Commons предоставляет Файлы.прикасаться() метод, реализующий то же поведение, что и ” прикасаться “утилита в Linux.

Поэтому он создает новый пустой файл или даже файл и полный путь к нему в файловой системе:

@Test public void givenUsingCommonsIo_whenCreatingFile_thenCorrect() throws IOException { FileUtils.touch(new File(FILE_NAME)); }

Обратите внимание, что это ведет себя немного иначе, чем в предыдущих примерах: если файл уже существует, операция не завершается неудачно, она просто ничего не делает.

И вот он у нас – 4 быстрых способа создания нового файла на Java.

Конструкторы

В обозначении имен файлов и каталогов помогают различные конструкторы:

  • File (File parent, String child) — получим файл из соединения родительского пути и строки дочернего пути:

File parentf1 = new File («c:/MyProgram»);File cldf2 = new File (parentf1, «f2.txt»); System.out.println (cldf2);

Результат:

c:MyProgramf2.txt

  • File (String pathname) — увидим файл, представляющий указанное имя пути:

File bestf3 = new File («c:», «MyProgram», «f2.txt»); System.out.println (bestf3);

Результат:

c:MyProgramf2.txt

  • File (String parent, String child) –получим экземпляр, образованный из строк родительского и дочернего путей:

File Myfile = new File («c:/», «f2.txt»);System.out.println (Myfile);

Результат:

c:MyProgramf2.txt

  • 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());

Результат:

Myf:/c:/ MyProgram/superf2.png

Методы класса 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 Mydir = new File («D://Program»); // проверяем каталог или нет if (Mydir.isDirectory()) { // если да, что в нем For (File item : Mydir.listFiles()){ If (item.isDirectory()){                      System.out.println(item.getName() + »  directory»); } else{ System.out.println(item.getName() + » file»); }

Давайте попробуем придумать новое название и убрать каталог:

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*, пропишем звездочку, т. к. в дальнейшем понадобятся еще классы из этой библиотеки). Импорт в редакторе должен иметь такой вид:

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(). Как должен выглядеть код на этом этапе, показано на рисунке ниже.

Как осуществить запись в файл в Java

При запуске программы в корне проекта появится файл text.txt, в котором будет написано «пример записи в файл в Java». Однако данный пример годится только для ознакомительных целей, чтобы применить его в «боевых» условиях нужно провести небольшой рефакторинг.

Рефакторинг

Первое, что нужно сделать, — заключить код, отвечающий за ввод вывод данных в конструкцию try — catch (так легче управлять исключениями и применять свои исключения). Затем нужно создать отдельную переменную с типом File, куда можно записать адрес и название файла (это удобно, т. к. часто нужно работать с несколькими файлами, их помещают в отдельные переменные и обрабатывают циклом, и только затем результирующая переменная вставляется как параметр в FileWriter).

Также хорошей практикой при работе с потоками ввода/вывода считается использование буфера (класс FileWriter обращается к диску, если данных много это может потребовать много памяти, поэтому разумно манипулировать данными, используя буфер), для этого применяется класс BufferedWriter, а FileWriter записывается в скобки в качестве параметра. Для освобождения буфера вызывается метод flush(), его можно прописать перед методом close(), теперь код будет выглядеть так, как показано ниже.

Как осуществить запись в файл в Java

Как записать 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»);

Окончательно код будет выглядеть так, как показано ниже.

Как осуществить запись в файл в Java

Результат выполнения данного кода будет следующим: в файле 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

JavaScript: работаем с синтаксической конструкцией switch. Оператор Switch в Java
Как определить длину массива javascript и еще много функций работы с ними. Работа с массивами в JavaScript



pc71.ru