어제 오늘 내일

[Java] 디렉토리 생성하기 본문

IT/Java

[Java] 디렉토리 생성하기

hi.anna 2021. 5. 30. 21:49

 

 

Java API를 이용하여, 파일 및 디렉토리를 다루는 방법을 알아보고 있습니다.

[Java] 텍스트 파일 읽기 ( FileReader, BufferedReader, Scanner, Files )

[Java] 파일 생성하는 3가지 방법 (File, FileOutputStream, Files)

[Java] 파일, 디렉토리 존재 여부 확인하기

[Java] 파일에 텍스트 쓰기

[Java] 파일, 디렉토리 삭제하기

[Java] 현재 디렉토리 가져오기

[Java] 파일 사이즈 구하는 3가지 방법

 

이번에는, 디렉토리를 생성하는 방법을 소개합니다.

 

  1. java.nio.file.Files
    • createDirectory()
    • createDirectories()
  2. java.io.File
    • mkdir()
    • mkdirs()

 

 

1. java.nio.file.Files

(java.nio.file.Files 클래스는 java 7 이후부터 사용 가능합니다.)

 createDirectory() 

public static Path createDirectory​(Path dir, FileAttribute<?>... attrs) throws IOException

java.nio.file.Files 클래스의 createDirectory() 메소드를 이용해서, 디렉토리를 생성할 수 있습니다.

2번째 파라미터인 attrs는 옵션입니다.

  • 디렉토리가 존재하면, FileAlreadyExistsException 이 발생합니다.
  • 중첩된 디렉토리를 생성할 때, 부모 디렉토리가 존재하지 않으면, NoSuchFileException 이 발생합니다.

  코드  

import java.io.IOException;
import java.nio.file.FileAlreadyExistsException;
import java.nio.file.Files;
import java.nio.file.NoSuchFileException;
import java.nio.file.Path;
import java.nio.file.Paths;

public class CreateDirectory {
    public static void main(String[] args) {

        Path directoryPath = Paths.get("d:\\example\\new_directory");

        try {
            // 디렉토리 생성
            Files.createDirectory(directoryPath);

            System.out.println(directoryPath + " 디렉토리가 생성되었습니다.");
            
        } catch (FileAlreadyExistsException e) {
            System.out.println("디렉토리가 이미 존재합니다");
        } catch (NoSuchFileException e) {
            System.out.println("디렉토리 경로가 존재하지 않습니다");
        }catch (IOException e) {
            e.printStackTrace();
        }
    }
}

FileAlreadyExistsException

'D:\example\new_directory'가 이미 존재하는 경우 발생합니다.

 

NoSuchFileException

부모 디렉토리인 'D:\example' 디렉토리가 존재하지 않는 경우 발생합니다.

 

 

 createDirectories() 

public static Path createDirectories​(Path dir, FileAttribute<?>... attrs) throws IOException
  • 디렉토리가 존재하더라도, exception을 발생시키지 않습니다.
  • 중첩된 디렉토리를 생성할 때, 부모 디렉토리가 존재하지 않으면,
    자동으로 부모 디렉토리를 만들어 줍니다.
    Exception은 발생하지 않습니다.

  코드  

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class CreateDirectory {
    public static void main(String[] args) {

        Path directoryPath = Paths.get("d:\\example\\new_directory");

        try {
            // 디렉토리 생성
            Files.createDirectories(directoryPath);

            System.out.println(directoryPath + " 디렉토리가 생성되었습니다.");

        }catch (IOException e) {
            e.printStackTrace();
        }
    }
}

'D:\example\new_directory' 디렉토리가 이미 존재하는 경우,

새로운 디렉토리를 만들지 않고, exception도 발생시키지 않습니다.

 

'D:\example\new_directory'의 상위 디렉토리인 'D:\example'가 존재하지 않는 경우,

자동으로 'D:\example'를 생성해 줍니다.

 

 

 

2. java.io.File

 mkdir() 

public boolean mkdir()

java.io.File 클래스의 mkdir()을 사용하면, 디렉토리를 생성할 수 있습니다.

  • 디렉토리가 존재하면, 디렉토리를 생성하지 않고, false를 리턴합니다.
    (Exception은 발생하지 않습니다.)
  • 중첩된 디렉토리를 생성할 때, 부모 디렉토리가 존재하지 않으면, false를 리턴합니다.
    (Exception은 발생하지 않습니다.)

  코드  

import java.io.File;

public class CreateDirectory {
    public static void main(String[] args) {

        File file = new File("d:\\example\\new_directory");

        // 디렉토리 생성
        boolean directoryCreated = file.mkdir();

        // 결과 출력
        System.err.println(directoryCreated);
    }
}

'D:\example\new_directory' 디렉토리가 이미 존재하는 경우,

새로운 디렉토리를 만들지 않고, false를 리턴합니다.

 

'D:\example\new_directory'의 상위 디렉토리인 'D:\example'가 존재하지 않는 경우,

새로운 디렉토리를 만들지 않고, false를 리턴합니다.

 

 

 mkdirs() 

public boolean mkdirs()

mkdirs() 메소드를 사용하여 디렉토리를 생성하면, 

중첩된 디렉토리를 생성할 때, 부모 디렉토리가 없으면, 자동으로 부모 디렉토리를 생성해 줍니다.

  • 디렉토리가 존재하면, 디렉토리를 생성하지 않고, false를 리턴합니다.
    (Exception은 발생하지 않습니다.)
  • 중첩된 디렉토리를 생성할 때, 부모 디렉토리가 존재하지 않으면, 부모 디렉토리를 생성하고, true를 리턴합니다.
    (Exception은 발생하지 않습니다.)

  코드  

import java.io.File;

public class CreateDirectory {
    public static void main(String[] args) {

        File file = new File("d:\\example\\new_directory");

        // 디렉토리 생성
        boolean directoryCreated = file.mkdirs();

        // 결과 출력
        System.err.println(directoryCreated);
    }
}

'D:\example\new_directory' 디렉토리가 이미 존재하는 경우,

새로운 디렉토리를 만들지 않고, false를 리턴합니다.

 

'D:\example\new_directory'의 상위 디렉토리인 'D:\example'가 존재하지 않는 경우,

자동으로 'D:\example'를 생성하고, true를 리턴합니다.

 


 

Java API 중, 

java.nio.file.Files 클래스와 java.io.File 클래스를 이용하여 디렉토리를 만드는 방법을 알아보았습니다.

두 클래스 모두 디렉토리를 생성할 수 있는, 비슷한 메소드를 제공합니다.

두 클래스의 가장 큰 차이는 적절한 Exception을 발생시키느냐, 발생시키지 않느냐입니다.

java.nio.file.Files 클래스가

정상적으로 디렉토리를 생성하지 못하는 경우,

그 원인에 맞는 Exception을 적절히 발생시키기 때문에,

두 개 클래스를 모두 사용할 수 있는 상황이라면,

java.nio.file.File 클래스를 사용하는 것이 더 낫다고 생각합니다.

 

 

 

반응형
Comments