如何在Java中删除非空目录
时间:2020-02-23 14:34:50 来源:igfitidea点击:
在本教程中,我们将看到如何删除非空的目录/文件夹。
我们可以使用java.io.file的删除eMPy文件夹,但如果它不是空的,则无法删除它。
有多种方法可以做到。
- 使用Java递归
- 使用apache common io
使用Java递归:
这样做是非常直接的。
它将遍历文件夹中的所有文件。
如果它是文件,那么我们可以直接删除它,但如果它在内部找到文件夹,那么我们再次调用相同的方法。
//Delete using recursion
public static void delete(File file)
throws IOException{
if(file.isDirectory()){
//We can directly delete if we found empty directory
if(file.list().length==0){
file.delete();
System.out.println("Deleting folder : "
+ file.getAbsolutePath());
}else{
//list all the files in directory
File files[] = file.listFiles();
for (File temp : files) {
//recursive delete
delete(temp);
}
//Check directory again, if we find it empty, delete it
if(file.list().length==0){
file.delete();
System.out.println("Deleting folder : "
+ file.getAbsolutePath());
}
}
}else{
//if file, then we can directly delete it
file.delete();
System.out.println("Deleting file : " + file.getAbsolutePath());
}
}
使用apache common io:
删除非空文件夹非常简单。
我们只需要调用fileutils.deletedirectory()方法。
//Delete using Apache common IO
public static void deleteUsingApacheIO(File f)
{
try {
FileUtils.deleteDirectory(f);
} catch (IOException e) {
e.printStackTrace();
}
}
Java程序:
package org.igi.theitroad;
import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
public class DeleteNonEmptyDirectoryMain {
public static void main(String[] args) {
System.out.println("Deleting using recursion");
System.out.println("---------------");
File folder= new File("/Users/igi/Desktop/Blog/temp1");
//Using recusrion
try {
delete(folder);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("---------------");
System.out.println("Deleting using Apache IO");
File folder2= new File("/Users/igi/Desktop/Blog/temp2");
deleteUsingApacheIO(folder2);
System.out.println("Deleting folder : "
+ folder2.getAbsolutePath());
}
//Delete using recursion
public static void delete(File file)
throws IOException{
if(file.isDirectory()){
//We can directly delete if we found empty directory
if(file.list().length==0){
file.delete();
System.out.println("Deleting folder : "
+ file.getAbsolutePath());
}else{
//list all the files in directory
File files[] = file.listFiles();
for (File temp : files) {
//recursive delete
delete(temp);
}
//Check directory again, if we find it empty, delete it
if(file.list().length==0){
file.delete();
System.out.println("Deleting folder : "
+ file.getAbsolutePath());
}
}
}else{
//if file, then we can directly delete it
file.delete();
System.out.println("Deleting file : " + file.getAbsolutePath());
}
}
//Delete using Apache common IO
public static void deleteUsingApacheIO(File f)
{
try {
FileUtils.deleteDirectory(f);
} catch (IOException e) {
e.printStackTrace();
}
}
}
当我在上面的程序上运行时,我得到了以下输出
Deleting using recursion -------------- Deleting file : /Users/igi/Desktop/Blog/temp1/.DS_Store Deleting file : /Users/igi/Desktop/Blog/temp1/BinaryTree/.DS_Store Deleting file : /Users/igi/Desktop/Blog/temp1/BinaryTree/verticalSum.jpg.png Deleting file : /Users/igi/Desktop/Blog/temp1/BinaryTree/VerticalSumOrder.png Deleting folder : /Users/igi/Desktop/Blog/temp1/BinaryTree Deleting file : /Users/igi/Desktop/Blog/temp1/jersey json/.DS_Store Deleting file : /Users/igi/Desktop/Blog/temp1/jersey json/jerseyJsonCountry.png Deleting file : /Users/igi/Desktop/Blog/temp1/jersey json/jerseyJsonCountryID.png Deleting file : /Users/igi/Desktop/Blog/temp1/jersey json/jerseyMavenBuild.png Deleting file : /Users/igi/Desktop/Blog/temp1/jersey json/jerseyMavenCleanInstall.png Deleting file : /Users/igi/Desktop/Blog/temp1/jersey json/jerseyProjectStructure.png Deleting folder : /Users/igi/Desktop/Blog/temp1/jersey json Deleting folder : /Users/igi/Desktop/Blog/temp1 -------------- Deleting using Apache IO Deleting folder : /Users/igi/Desktop/Blog/temp2

