黑马程序员技术交流社区
标题:
删除非空目录疑问(隐藏与非隐藏)
[打印本页]
作者:
庄星睿
时间:
2012-7-4 21:15
标题:
删除非空目录疑问(隐藏与非隐藏)
本帖最后由 庄星睿 于 2012-7-6 23:25 编辑
在删除非空目录的时候,如果遇到了隐藏文件或目录,就先判断一下,视频里这样写的:
import java.io.*;
class RemoveDir
{
public static void main(String[] args)
{
File dir=new File("F:\\learning diary");
removeDir(dir);
}
public static void removeDir(File dir)
{
File[] files=dir.listFiles();
for(int x=0; x<files.length; x++)
{
if(!files[x].isHidden() && files[x].isDirectory()) //这里先判断文件是否隐藏
removeDir(files[x]);
else
System.out.println(files[x].toString()+":-file-:"+files[x].delete());
}
System.out.println(dir.toString()+"..dir.."+dir.delete());
}
}
复制代码
问题一:
这个程序如果文件里有隐藏文件,执行第一次时,隐藏文件和目录均未删除,但原来文件的隐藏属性都自动消失了,所以多执行几次之后,文件就都删除了,为什么?
我改了一下代码:
public static void removeDir2(File dir)
{
File[] files=dir.listFiles();
for(int x=0; x<files.length; x++)
{
if (files[x].isHidden()) //先判断是否隐藏
continue;
if(files[x].isDirectory())
removeDir(files[x]);
else
System.out.println(files[x].toString()+":-file-:"+files[x].delete());
}
if(dir.length()==0) 先判断目录是否为空,如果为空则删除
{
System.out.println("dir.length:---->"+dir.length());
System.out.println(dir.toString()+"..dir.."+dir.delete());
}
}
复制代码
问题二:
我改了代码之后,如果目录不是隐藏的,但目录里边的文件是都是隐藏的, 那么dir.length()还是0,还会执行删除目录的操作,就会出现 dir:false
那么对于非隐藏目录中的隐藏文件,我怎样判断这个非隐藏的目录是非空的?
作者:
温少邦
时间:
2012-7-5 22:54
本帖最后由 温少邦 于 2012-7-5 22:58 编辑
问题一:这个程序如果文件里有隐藏文件,执行第一次时,隐藏文件和目录均未删除,但原来文件的隐藏属性都自动消失了,所以多执行几次之后,文件就都删除了,为什么?
for(int x=0; x<files.length; x++){
if(!files[x].isHidden()&&files[x].isDirectory())
removeDir2(files[x]);
else
System.out.println(files[x].toString()+":-file-:"+files[x].delete());
}
复制代码
这一段代码,
如果要判断isHidden的话就不能放在if里面了
要这样写
for(int x=0; x<files.length; x++){
if(!files[x].isHidden())
if(files[x].isDirectory())
removeDir(files[x]);
else
System.out.println(files[x].toString()+":-file-:"+files[x].delete());
}
复制代码
要把判断Hidden放在外面
不然如果文件或目录是隐藏的话,也会执行else里面的语句
会直接尝试删除这个目录或文件
问题二: 我改了代码之后,如果目录不是隐藏的,但目录里边的文件是都是隐藏的, 那么dir.length()还是0,还会执行删除目录的操作,就会出现 dir:false
那么对于非隐藏目录中的隐藏文件,我怎样判断这个非隐藏的目录是非空的?
dir是一个目录,即使里面有不是隐藏的文件
你直接调用dir.length()也会返回0
要判断目录是否为空,就判断files.length是否是0
看看里面有没有东西
不过delete方法删除目录的话 会自动判断目录是否是空
是空才会删除这个目录
所以也不需要自己判断目录是否为空了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2