Java에서 새 파일 생성하기

파일을 만드는 것은 매우 흔한 IO 작업입니다. 오늘은 자바에서 파일을 만드는 다양한 방법을 살펴보겠습니다.

Java create file

자바에서 파일을 만드는 세 가지 인기있는 방법이 있습니다. 하나씩 살펴보겠습니다.

  1. File.createNewFile()

    java.io.File 클래스를 사용하여 Java에서 새 파일을 만들 수 있습니다. 파일 객체를 초기화할 때 파일 이름을 제공한 다음 createNewFile() 메서드를 호출하여 Java에서 새 파일을 만들 수 있습니다. File createNewFile() 메서드는 새 파일이 생성되면 true를 반환하고 파일이 이미 존재하면 false를 반환합니다. 이 메서드는 또한 파일을 만들 수 없는 경우 java.io.IOException을 throw합니다. 생성된 파일은 비어 있으며 크기가 0바이트입니다. 파일 이름을 전달하여 파일 객체를 생성할 때 파일 이름은 절대 경로로 지정될 수 있습니다. 또는 파일 이름만 제공하거나 상대 경로를 제공할 수도 있습니다. 상대 경로의 경우 파일 객체는 프로젝트의 루트 디렉토리에서 파일을 찾습니다. 명령 줄에서 프로그램을 실행하는 경우, 상대 경로의 경우 파일 객체는 현재 디렉토리에서 파일을 찾습니다. 파일 경로를 만들 때 프로그램이 플랫폼에 독립적이 되도록 System 속성 file.separator를 사용해야 합니다. 간단한 자바 프로그램으로 다양한 시나리오를 살펴보겠습니다.

    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 파일이 프로젝트 루트 디렉토리에 생성되었습니다
    메인 스레드에서 예외 발생 
    java.io.IOException: No such file or directory
    	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이 throw되는데 이는 tmp 디렉토리가 프로젝트 루트 폴더에 존재하지 않기 때문입니다. 따라서 createNewFile()는 단순히 파일을 생성하려고 시도하고 절대 또는 상대적인 디렉토리가 이미 존재해야 합니다. 그렇지 않으면 IOException을 throw합니다. 따라서 프로젝트 루트에 “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 파일이 프로젝트 루트 디렉토리에 생성되었습니다
    메인 스레드에서 예외 발생 java.io.IOException: No such file or directory
    	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의 write 메서드를 사용할 수 있습니다. 아래는 그 사용법을 보여주는 간단한 코드 조각입니다. 위에서 논의한 절대 경로와 상대 경로에 대한 규칙은 이 경우에도 적용됩니다.

    String fileData = "Pankaj Kumar";
    FileOutputStream fos = new FileOutputStream("name.txt");
    fos.write(fileData.getBytes());
    fos.flush();
    fos.close();
    
  3. Java NIO Files.write()

    Java NIO Files 클래스를 사용하여 새 파일을 만들고 그 안에 데이터를 작성할 수 있습니다. 이것은 IO 리소스를 닫을 필요가 없어 좋은 옵션입니다.

    String fileData = "Pankaj Kumar";
    Files.write(Paths.get("name.txt"), fileData.getBytes());
    

이것으로 자바 프로그램에서 새 파일을 만드는 것에 대한 설명은 끝입니다.

더 많은 코어 자바 예제는 우리의 GitHub 저장소에서 확인할 수 있습니다.

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