어제 오늘 내일

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

IT/Java

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

hi.anna 2021. 5. 29. 22:48

 

Java API를 이용하여 파일을 다루는 방법을 알아보고 있습니다.

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

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

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

[Java] 파일에 텍스트 쓰기

 

이번에는 파일, 디렉토리를 삭제하는 방법을 알아보도록 하겠습니다.

  1. java.nio.file.Files
    • delete()
    • deleteIfExists()
  2. java.io.File
    • detete()

 

 

1. java.nio.file.Files

delete()

Files.delete() 메소드를 사용하여 파일 또는 디렉토리를 삭제할 수 있습니다.

  • 파일 또는 디렉토리를 삭제하기 전에, 해당 파일이 존재하는지 확인해야 합니다.
    삭제 대상이 없으면, NoSuchFileException이 발생합니다.
  • 삭제하려는 대상이 디렉토리이면, 디렉토리는 비어 있어야 합니다. 
    디렉토리 안에 파일이 있으면, DirectoryNotEmptyException이 발생합니다.
  • 파일이 열려있거나, JVM 또는 다른 응용프로그램에서 사용중이면
    파일을 삭제하지 못하고 Exception이 발생합니다.

  Files.delete() 예제  

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

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

        Path filePath = Paths.get("d:\\example\\file.txt");
        Path directoryPath = Paths.get("d:\\example");

        try {
            // 파일 삭제
            Files.delete(filePath);

            // 디렉토리 삭제
            Files.delete(directoryPath);
            
        } catch (NoSuchFileException e) {
            System.out.println("삭제하려는 파일/디렉토리가 없습니다");
        } catch (DirectoryNotEmptyException e) {
            System.out.println("디렉토리가 비어있지 않습니다");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

deleteIfExists()

Files.deleteIfExists() 를 사용하면,

파일이 존재하는 경우에는 파일을 삭제하고,

파일이 존재하지 않는 경우에는 파일을 삭제하지 않고, false를 리턴합니다.

(delete()의 경우에는, 파일이 존재하지 않는 경우 NoSuchFileException이 발생했지만,

deleteIfExist()의 경우에는 Exception이 발생하지 않습니다.)

  Files.deleteIfExists() 예제  

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

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

        Path filePath = Paths.get("d:\\example\\file.txt");
        Path directoryPath = Paths.get("d:\\example");

        try {
            // 파일 삭제
            Files.deleteIfExists(filePath);

            // 디렉토리 삭제
            Files.deleteIfExists(directoryPath);

        } catch (DirectoryNotEmptyException e) {
            System.out.println("디렉토리가 비어있지 않습니다");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

 

2. java.io.File

detete()

  • 삭제하려는 디렉토리는 비어있어야 합니다.
    삭제하려는 디렉토리가 비어있지 않으면, 디렉토리는 삭제되지 않고, false를 리턴합니다.
  • 삭제하려는 파일이나 디렉토리가 존재하지 않으면, false를 리턴합니다.
  • 삭제하려는 파일이나 디렉토리가 다른 파일에 의해서 사용중이면,
    파일은 삭제되지 않고, false를 리턴합니다.

  File.delete() 예제  

import java.io.File;

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

        File file = new File("d:\\example\\target.txt");
        File directory = new File("d:\\example");

        // 파일 삭제
        boolean fileDeleted = file.delete();

        // 디렉토리 삭제
        boolean directoryDeleted = directory.delete();

        // 삭제 결과 출력
        System.out.println(fileDeleted);
        System.out.println(directoryDeleted);

    }
}

 


 

java.nio.file.Files와 java.ion.File 을 사용하여 디렉토리나 파일을 삭제하는 방법을 알아보았습니다.

두 클래스 모두 사용법은 비슷하지만,

java.nio.file.Files 클래스는, 파일을 삭제할 수 없는 경우에 그에 맞는 Exception을 발생시켜 주기 때문에

파일이 삭제되지 않는 경우 원인을 파악하기가 훨씬 쉽습니다.

 

 

반응형
Comments