Java를 사용하여 디렉토리에서 파일 삭제
-
Java에서
File
클래스의delete()
를 사용하여 디렉토리의 파일 삭제 - Java 8 스트림 및 NIO2를 사용하여 디렉토리에서 파일 삭제
- Apache Common IO를 사용하여 디렉토리에서 파일 삭제
- 결론
이 기사에서는 폴더 자체를 삭제하지 않고 폴더 안에 있는 파일을 삭제하는 방법을 알아봅니다.
여러 가지 방법이 있습니다. 하나씩 살펴보겠습니다.
Java에서 File
클래스의 delete()
를 사용하여 디렉토리의 파일 삭제
Java에는 java.io.File
클래스가 있습니다. 여기에는 파일과 빈 디렉토리를 삭제하는 데 사용되는 delete()
라는 메서드가 포함되어 있습니다.
통사론:
file_object.delete()
우리 시스템의 D:
드라이브에 test
라는 이름의 디렉토리가 존재하고 일부 텍스트 파일과 일부 하위 폴더가 포함되어 있다고 가정해 봅시다. 이제 delete()
메서드를 사용하여 이것을 삭제하는 방법을 살펴보겠습니다.
예제 코드:
import java.io.File;
public class Example {
public static void main(String[] args) {
String path = "D:\\test";
File obj = new File(path);
for (File temp : Objects.requireNonNull(obj.listFiles())) {
if (!temp.isDirectory()) {
temp.delete();
}
}
}
}
위의 코드를 실행하면 test
내부의 모든 파일이 삭제되지만 메인 폴더인 test
와 하위 폴더는 그대로 있는 것을 확인할 수 있습니다.
위에서 우리는 디렉토리의 경로
를 저장하는 문자열 변수를 만들었습니다. 그런 다음 이 경로를 사용하여 파일 개체 obj
를 만들었습니다.
그런 다음 listFiles()
메서드를 사용하여 해당 경로에 있는 콘텐츠를 나열했습니다.
if
조건을 사용하여 디렉토리인지 파일인지 확인합니다. 파일이면 삭제합니다. 그렇지 않으면 우리는 아무것도 하지 않습니다.
Java 8 스트림 및 NIO2를 사용하여 디렉토리에서 파일 삭제
이 방법에서는 해당 경로
에 있는 모든 파일과 하위 폴더를 포함하는 Stream<Path>
를 반환하는 Files.walk(Path)
방법을 사용할 수 있습니다.
그런 다음 if
조건을 사용하여 디렉토리인지 파일인지 확인합니다. 파일이면 삭제합니다. 그렇지 않으면 우리는 아무것도 하지 않습니다.
예제 코드:
import java.io.*;
import java.nio.file.*;
import java.util.*;
public class Demo {
public static void main(String[] args) throws IOException {
Path path = Paths.get("D:\\test");
Files.walk(path).sorted(Comparator.reverseOrder()).forEach(data -> {
try {
if (!Files.isDirectory(data)) {
System.out.println("deleting: " + data);
Files.delete(data);
}
} catch (IOException obj) {
obj.printStackTrace();
}
});
}
}
출력:
deleting: D:\test\subfolder 2\file4.txt
deleting: D:\test\subfolder 1\file3.txt
deleting: D:\test\file2.txt
deleting: D:\test\file1.txt
위의 코드가 실행되면 Depth First Search 방식으로 디렉토리와 서브디렉토리 파일을 모두 삭제한다.
test
디렉토리와 subfolder 1
및 subfolder 2
하위 디렉토리가 그대로 남아 있음을 확인할 수 있습니다.
Apache Common IO를 사용하여 디렉토리에서 파일 삭제
지금까지 우리가 본 모든 메소드는 file
및 stream
메소드와 함께 일부 재귀 개념을 사용하는 평범한 오래된 Java 메소드입니다. 그러나 Apache Common IO FileUtils.cleanDirectory()
를 사용하여 기본 디렉토리 자체를 삭제하지 않고 기본 디렉토리 내의 모든 파일과 하위 디렉토리를 재귀적으로 삭제할 수 있습니다.
기본 Java 메소드에 비해 이것을 사용하는 주요 이점은 코드 라인(LOC)이 훨씬 적어 쉽고 효율적인 작성 방법이 된다는 것입니다.
Apache 공통 IO를 사용하려면 먼저 pom.xml
파일에 종속성을 추가해야 합니다.
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
</dependency>
예제 코드:
import java.io.*;
import org.apache.commons.io.FileUtils;
public class Example {
public static void main(String[] args) throws IOException {
String path = "D:\\test";
File obj = new File(path);
FileUtils.cleanDirectory(obj);
}
}
결론
이 기사에서는 Java를 사용하여 디렉토리를 삭제하는 다양한 방법을 보여줍니다. 우리는 delete()
메서드와 Java 8 스트림을 사용하는 방법과 Apache commons IO를 사용하는 것이 LOC(코드 라인)가 우리 프로젝트의 성능에 큰 영향을 미치는 경우 어떻게 더 효율적이고 시간을 절약할 수 있는지 이해했습니다.