黑马程序员技术交流社区
标题:
递归删除多级文件
[打印本页]
作者:
Piaget
时间:
2015-2-9 21:27
标题:
递归删除多级文件
本帖最后由 Piaget 于 2015-2-24 13:24 编辑
<div class="blockcode"><blockquote>import java.io.File;
public class TestDigui
{
/**
* 删除多级文件
*/
public static void main(String[] args)
{
deleDir("F:\\java");
}
public static void deleDir(String path)
{
File file = new File(path);
String[] names = file.list();
for (String string : names)
{
System.out.println(string);
String newpath = path + "\\" + string;
File newFile = new File(newpath);
if (newFile.isDirectory())
{
deleDir(newFile.getPath());
}
// newFile.delete();//删除文件
}
}
}
复制代码
注释的部分是第一次写的时候没考虑周到,发现删除完剩余了多级空文件夹。分析发现,如果有else,当一个文件夹是空的,递归一下,下次得不到里面的内容,也就不能进入遍历。于是if操作结束,但是不会进入else。最后删除不了这个空文件夹。
而去掉else,当这个文件夹是空的,结束if语句会向下执行删除操作。空文件夹就删除了。
作者:
邓士林
时间:
2015-2-9 21:54
:):):):):)
作者:
梁小刀11
时间:
2015-2-10 00:13
1,这个应该有个FileNotFoundExpection
2, 遍历出来的String是个绝对路径,递归体的中调用自身出错.
作者:
边晓炎
时间:
2015-2-10 00:25
没看到删除!出现空文件夹的情况只需要你在递归后file.delete就删除了!
作者:
huangchunwei
时间:
2015-2-10 09:37
学习了。。。:):):)
作者:
cly成子
时间:
2015-2-10 09:49
有点深!待学习!受教了!
作者:
瞿乐
时间:
2015-2-10 11:11
本帖最后由 瞿乐 于 2015-2-10 11:27 编辑
我这里有个逻辑看起来简单些的。
public static void deleDir(File file){
final File[] fs = file.listFiles();
if(file.isFile()||fs==null||fs.length==0){
System.out.println("del::"+file.getAbsolutePath());
file.delete();
}else{
for(File f: fs){
deleDir(f);
System.out.println(f.getAbsolutePath());
f.delete();
}
}
}
复制代码
但是还有个bug。
作者:
瞿乐
时间:
2015-2-10 11:26
瞿乐 发表于 2015-2-10 11:11
我这里有个逻辑看起来简单些的。
但是还有个bug。
作者:
俺做android开发
时间:
2015-2-10 11:28
顶你,给哦黑马币
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2