public Class DeleteDir{
public static void main(String[]args){
File dir = new File("D:\");
deletedir(dir);
}
public static void deletedir(File dir){
File[] files = dir.listFiles();
if(files.length==0)
dir.delete;
else
for(File file:files){
if(file.isDirectory())
deletedir(file);
else
continue;
}
}
}
功能上确实把一些空文件夹删除了,我也没去看有没有全部删除,但是运行一段时间之后会在判断数组长度是否为0那里报错。这是为什么呢?是因为系统文件或其他什么的权限不够吗?
多看看api文档,就知道了
listFiles
public File[] listFiles()返回一个抽象路径名数组,这些路径名表示此抽象路径名所表示目录中的文件。
如果此抽象路径名并不表示一个目录,则此方法将返回 null。否则,为目录中的每个文件或目录返回一个 File 对象数组。表示目录本身及其父目录的路径名不包括在结果中。得到的每个抽象路径名都是根据此抽象路径名,使用 File(File, String) 构造方法构造。所以,如果此路径名是绝对路径名,则得到的每个路径名都是绝对路径名;如果此路径名是相对路径名,则得到的每个路径名都是相对于同一目录的路径名。
不保证所得数组中的相同字符串将以特定顺序出现,特别是不保证它们按字母顺序出现。
返回:
表示此抽象路径名所表示目录中的文件和目录的抽象路径名数组。如果目录为空,则数组也将为空。如果抽象路径名不表示一个目录,或者发生 I/O 错误,则返回 null。
public static void deletedir(File dir){
File[] files = dir.listFiles();
if(files==null)return;//如果抽象路径名不表示一个目录,或者发生 I/O 错误,则返回 null。
if(files.length==0)//空文件夹
dir.delete;
else
for(File file:files){
if(file.isDirectory())
delitedir(file);
else
continue;
}
}
不是,报错原因是有种场景,当你的目录是空目录时File[] files = dir.listFiles();得到的files为null
那你的files.length就会报空指针。我写的一个遍历出某目录中所有文件名,和你遇到相识的问题,我的解决方案是
//如果目录为空目录则要return,否则会空指针异常
if (files == null) {
return;
}
博客地址:
你可以参考下