Java를 사용하여 폴더 삭제
-
Java를 사용하여 빈 폴더를 삭제하려면
File
클래스의delete()
를 사용하십시오. - Java를 사용하여 재귀적으로 폴더 삭제
- Java 8 스트림 및 NIO2를 사용하여 Java를 사용하여 폴더 삭제
- Apache Common IO를 사용하여 Java를 사용하여 폴더 삭제
- 결론
이 기사에서는 Java 프로그래밍 언어를 사용하여 폴더/디렉토리를 삭제하는 방법을 배웁니다. 여러 가지 방법이 있습니다. 하나씩 살펴보겠습니다.
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);
obj.delete();
}
}
위의 코드가 실행되면 시스템의 D:
드라이브에서 test
폴더가 삭제되는 것을 볼 수 있습니다.
위의 코드에서 디렉터리의 경로를 저장하는 문자열 변수를 만들었습니다. 그런 다음 이 경로를 사용하여 파일 개체 obj
를 만들었습니다.
마지막으로 delete()
메서드를 사용하여 파일 객체 obj
가 참조하는 해당 경로의 디렉토리를 삭제합니다.
그러나 test
폴더에 일부 파일이 포함되어 있으면 file1.txt
및 file2.txt
라고 합시다. 이 시나리오에서는 위의 코드가 실행될 때 디렉터리가 비어 있지 않기 때문에 아무 일도 일어나지 않으며 delete()
메서드는 빈 디렉터리에 대해서만 작동한다는 것을 알고 있습니다.
재귀 삭제를 사용하여 비어 있지 않은 디렉토리를 삭제하는 이 문제를 극복할 수 있습니다.
Java를 사용하여 재귀적으로 폴더 삭제
이 메서드에서는 재귀와 함께 delete()
메서드를 사용합니다. 아이디어는 test
디렉토리에 있는 모든 하위 폴더와 파일을 먼저 삭제하고 비어 있으면 delete()
메서드를 사용하여 삭제할 수 있다는 것입니다.
디렉토리 구조:
test
/ | \
/ | \
/ | \
file1.txt | file2.txt
|
hero
/ \
file3.txt file4.txt
D:
드라이브에 test
폴더가 있으며, 이 폴더에는 file1.txt
및 file2.txt
라는 두 개의 텍스트 파일이 있습니다. 또한 하위 폴더 hero
가 있으며, 이 폴더에는 다시 file3.txt
및 file4.txt
라는 두 개의 텍스트 파일이 포함되어 있습니다.
여기에서 file1.txt
, file2.txt
를 삭제한 다음 하위 폴더 hero
로 이동하여 file3.txt
및 file4.txt
를 삭제합니다. 하위 폴더가 비어 있으므로 쉽게 삭제할 수 있습니다.
이 모든 작업이 끝나면 test
디렉토리도 비게 되며 delete()
메서드를 사용하여 쉽게 삭제할 수 있습니다.
연산:
-
삭제할 디렉터리의 모든 파일과 하위 폴더를 가져옵니다.
-
디렉토리가 아닌 모든 자식은 파일을 삭제해야 함을 의미합니다.
-
재귀를 종료합니다.
-
하위 폴더/하위 디렉터리인 각 자식에 대해 1~3단계를 재귀적으로 반복합니다.
-
delete()
메서드를 사용하여 기본 디렉터리를 삭제합니다.
위의 알고리즘을 구현하려면 listFiles()
및 isDirectory()
라는 두 가지 함수를 사용해야 합니다.
listFiles()
메서드는 대상 디렉토리에 있는 모든 파일 및 하위 폴더의 추상 경로(개체) 배열을 반환합니다. isDirectory()
는 현재 개체가 디렉토리인 경우 true
를 반환하는 부울 함수입니다. 그렇지 않으면 false
를 반환합니다.
예제 코드:
import java.io.File;
public class Example {
static void recursiveDelete(File targetDirectory) {
File[] data = targetDirectory.listFiles();
for (File file : data) {
if (file.isDirectory())
recursiveDelete(file);
else
file.delete();
}
targetDirectory.delete();
}
public static void main(String[] args) {
String path = "D:\\test";
File obj = new File(path);
recursiveDelete(obj);
}
}
Java 8 스트림 및 NIO2를 사용하여 Java를 사용하여 폴더 삭제
이 방법에서는 해당 경로의 모든 파일과 하위 폴더를 포함하는 Stream<Path>
를 반환하는 Files.walk(Path)
방법을 사용할 수 있습니다.
예제 코드:
import java.io.*;
import java.nio.file.*;
import java.util.*;
public class Example {
public static void main(String[] args) throws IOException {
Path path = Paths.get("D:\\test");
Files.walk(path).sorted(Comparator.reverseOrder()).forEach(data -> {
try {
System.out.println("deleting: " + data);
Files.delete(data);
} catch (IOException obj) {
obj.printStackTrace();
}
});
}
}
위의 코드가 실행되면 디렉토리의 모든 내용을 삭제한 다음 깊이 우선 검색 방식으로 디렉토리 자체를 삭제합니다.
출력:
deleting: D:\test\hero\file4.txt
deleting: D:\test\hero\file3.txt
deleting: D:\test\hero
deleting: D:\test\file2.txt
deleting: D:\test\file1.txt
deleting: D:\test
Apache Common IO를 사용하여 Java를 사용하여 폴더 삭제
지금까지 우리가 본 모든 메소드는 file
및 stream
메소드와 함께 일부 재귀 개념을 사용하는 평범한 오래된 Java 메소드입니다. 그러나 Apache Common IO FileUtils.deleteDirectory
를 사용하여 디렉터리를 삭제할 수 있습니다.
기본 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.deleteDirectory(obj);
}
}
결론
이 기사에서는 Java를 사용하여 디렉토리를 삭제하는 다양한 방법을 보여줍니다. 재귀 및 Java 8 스트림을 사용하는 방법을 이해했습니다.
또한 Apache Commons IO를 사용하는 것이 LOC(코드 라인)가 프로젝트 성능에 큰 영향을 미치는 경우 어떻게 더 효율적이고 시간을 절약할 수 있는지 이해했습니다.