Java создать новый файл

Создание файла – очень распространенная операция ввода-вывода. Сегодня мы рассмотрим различные способы создания файла в Java.

Java создать файл

Существует три популярных метода создания файла в Java. Давайте посмотрим на них поочередно.

  1. File.createNewFile()

    java.io.File класс можно использовать для создания нового файла в Java. При инициализации объекта File мы указываем имя файла, а затем можем вызвать метод createNewFile() для создания нового файла в Java. Метод createNewFile() возвращает true, если новый файл создан, и false, если файл уже существует. Этот метод также генерирует исключение java.io.IOException, если не удается создать файл. Созданный файл пуст и имеет размер ноль байтов. При создании объекта File, передавая имя файла, его можно указать с абсолютным путем, или мы можем указать только имя файла, или относительный путь. Для относительного пути объект File пытается найти файлы в корневом каталоге проекта. Если мы запускаем программу из командной строки, для относительного пути объект File пытается найти файлы в текущем каталоге. При создании пути к файлу мы должны использовать системное свойство file.separator, чтобы сделать нашу программу платформенно-независимой. Давайте рассмотрим различные сценарии с помощью простой программы на Java для создания нового файла.

    package com.journaldev.files;
    
    import java.io.File;
    import java.io.IOException;
    
    public class CreateNewFile {
    
        /**
         * Этот класс показывает, как создать файл в Java
         * @param args
         * @throws IOException 
         */
        public static void main(String[] args) throws IOException {
            String fileSeparator = System.getProperty("file.separator");
            
            //абсолютное имя файла с путем
            String absoluteFilePath = fileSeparator+"Users"+fileSeparator+"pankaj"+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+" уже существует в корневом каталоге проекта");
        }
    
    }
    

    При выполнении вышеприведенной программы из среды Eclipse IDE в первый раз, производится следующий вывод.

    /Users/pankaj/file.txt Файл создан
    file.txt Файл создан в корневом каталоге проекта
    Exception in thread "main" 
    java.io.IOException: Нет такого файла или каталога
    	at java.io.UnixFileSystem.createFileExclusively(Native Method)
    	at java.io.File.createNewFile(File.java:947)
    	at com.journaldev.files.CreateNewFile.main(CreateNewFile.java:32)
    

    Для относительного пути генерируется исключение IOException, потому что каталог tmp отсутствует в корневом каталоге проекта. Таким образом, ясно, что метод createNewFile() просто пытается создать файл, и любой каталог, абсолютный или относительный, должен уже существовать, иначе он генерирует исключение IOException. Поэтому я создал каталог “tmp” в корневом каталоге проекта и снова выполнил программу, вот результат.

    Файл /Users/pankaj/file.txt уже существует
    Файл file.txt уже существует в корневом каталоге проекта
    tmp/file.txt Файл создан в корневом каталоге проекта
    

    Первые два файла уже существовали, поэтому createNewFile() возвращает false, третий файл был создан в каталоге tmp и возвращает true. Любое последующее выполнение приводит к следующему выводу:

    Файл /Users/pankaj/file.txt уже существует
    Файл file.txt уже существует в корневом каталоге проекта
    Файл tmp/file.txt уже существует в корневом каталоге проекта
    

    Если вы запустите ту же программу из каталога классов терминала, вот результат.

    //первое выполнение из каталога выходных классов	
    pankaj:~/CODE/JavaFiles/bin$ java com/journaldev/files/CreateNewFile
    Файл /Users/pankaj/file.txt уже существует
    file.txt Файл создан в корневом каталоге проекта
    Exception in thread "main" java.io.IOException: Нет такого файла или каталога
    	at java.io.UnixFileSystem.createFileExclusively(Native Method)
    	at java.io.File.createNewFile(File.java:947)
    	at com.journaldev.files.CreateNewFile.main(CreateNewFile.java:32)
    
    //каталог tmp не существует, давайте создадим его
    pankaj:~/CODE/JavaFiles/bin$ mkdir tmp
    
    //второе выполнение
    pankaj:~/CODE/JavaFiles/bin$ java com/journaldev/files/CreateNewFile
    Файл /Users/pankaj/file.txt уже существует
    Файл file.txt уже существует в корневом каталоге проекта
    tmp/file.txt Файл создан в корневом каталоге проекта
    
    //третье и последующее выполнение
    pankaj:~/CODE/JavaFiles/bin$ java com/journaldev/files/CreateNewFile
    Файл /Users/pankaj/file.txt уже существует
    Файл file.txt уже существует в корневом каталоге проекта
    Файл tmp/file.txt уже существует в корневом каталоге проекта
    
  2. FileOutputStream.write(byte[] b)

    Если вы хотите создать новый файл и одновременно записать в него некоторые данные, вы можете использовать метод записи FileOutputStream. Ниже приведен простой фрагмент кода, чтобы показать его использование. Правила для абсолютного пути и относительного пути, обсуждаемые выше, также применимы в этом случае.

    String fileData = "Панкадж Кумар";
    FileOutputStream fos = new FileOutputStream("name.txt");
    fos.write(fileData.getBytes());
    fos.flush();
    fos.close();
    
  3. Java NIO Files.write()

    Мы можем использовать класс Java NIO Files для создания нового файла и записи в него данных. Это хороший вариант, потому что нам не нужно беспокоиться о закрытии ресурсов ввода-вывода.

    String fileData = "Панкадж Кумар";
    Files.write(Paths.get("name.txt"), fileData.getBytes());
    

Вот и все для создания нового файла в программе на Java.

Вы можете ознакомиться с большим количеством примеров на языке Java в нашем репозитории GitHub.

Source:
https://www.digitalocean.com/community/tutorials/java-create-new-file