Java - 텍스트 파일 생성 방법

JS · 30 Apr 2020

Java에서 파일을 생성하는 다양한 방법을 소개합니다.

  • File를 이용하여 생성
  • Path, Files를 이용하여 생성
  • Commons-io 라이브러리를 이용하여 생성

예제와 함께 알아보겠습니다.

File 클래스를 이용하여 파일 생성

File.createNewFile()를 이용하여 파일을 생성할 수 있습니다. 파일의 생성 여부를 boolean으로 리턴합니다.

try {
    File file = new File("/home/mjs/test/text.txt");
    boolean success = file.createNewFile();
    if (!success) {
        System.out.println("Failed to create a file : /home/mjs/test/text.txt");
    }
} catch (IOException e) {
    e.printStackTrace();
}

파일이 이미 존재하는 경우, 파일 생성이 실패하며 false가 리턴됩니다.

Path, Files를 이용하여 생성(Java7)

Java7 nio 패키지의 Path와 Files를 이용하여 파일을 생성할 수 있습니다.

다음은 파일을 생성하는 예제입니다.

try {
    Path filePath = Paths.get("/home/mjs/test/text.txt");
    Files.createFile(filePath);
} catch (IOException e) {
    e.printStackTrace();
}

만약 파일 경로에 존재하지 않는 Directory가 있다면 Exception이 발생하며 파일 생성이 실패합니다.

예를 들어, 아래 코드를 실행했을 때 /home/mjs/test/new_dir/ 폴더가 존재하지 않으면 Exception이 발생하며 파일을 생성하지 못합니다.

try {
    Path filePath = Paths.get("/home/mjs/test/new_dir/text.txt");
    Files.createFile(filePath);
} catch (IOException e) {
    e.printStackTrace();
}

코드를 실행해보면 다음과 같은 Exception이 발생합니다.

java.nio.file.NoSuchFileException: /home/mjs/test/new_dir/text.txt
at sun.nio.fs.UnixException.translateToIOException(UnixException.java:86)
at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
at sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:214)
at java.nio.file.Files.newByteChannel(Files.java:361)
at java.nio.file.Files.createFile(Files.java:632)
at example.io.CreateFile.main(CreateFile.java:37)

따라서, 이런 경우 폴더를 먼저 만들고 파일을 생성해야 합니다.

Commons-io 라이브러리를 이용하여 파일 생성

Commons-io 라이브러리는 FileUtils 클래스를 제공하며, 이 클래스로 파일을 생성할 수 있습니다.

Gradle 프로젝트는 build.gradle의 dependencies에 다음과 같이 추가합니다.

dependencies {
  compile group: 'commons-io', name: 'commons-io', version: '2.6'
  ...
}

Maven 등의 다른 빌드시스템을 사용하는 프로젝트는 mvnrepository.com을 참고하셔서 설정하시면 됩니다.

FileUtils.touch()는 인자로 전달된 파일을 생성합니다.

try {
    File file = new File("/home/mjs/test/new_dir/text.txt");
    FileUtils.touch(file);
} catch (IOException e) {
    e.printStackTrace();
}

FileUtils.touch()는 위의 Files 클래스와 다르게, 파일 경로에 생성되지 않은 폴더가 있다면 폴더를 만들어주고 파일을 생성합니다.

따라서, /home/mjs/test/new_dir가 존재하지 않아도 파일을 생성하는데 영향을 주지 않습니다.

참고

댓글을 보거나 쓰려면 이 버튼을 눌러주세요.
codechachaCopyright ©2019 codechacha