A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 庄星睿 中级黑马   /  2012-7-4 21:15  /  1386 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 庄星睿 于 2012-7-6 23:25 编辑

在删除非空目录的时候,如果遇到了隐藏文件或目录,就先判断一下,视频里这样写的:
  1. import java.io.*;
  2. class RemoveDir
  3. {
  4. public static void main(String[] args)
  5. {

  6. File dir=new File("F:\\learning diary");
  7. removeDir(dir);
  8. }

  9. public static void removeDir(File dir)
  10. {
  11. File[] files=dir.listFiles();

  12. for(int x=0; x<files.length; x++)
  13. {
  14. if(!files[x].isHidden() && files[x].isDirectory())   //这里先判断文件是否隐藏
  15. removeDir(files[x]);
  16. else
  17. System.out.println(files[x].toString()+":-file-:"+files[x].delete());
  18. }

  19. System.out.println(dir.toString()+"..dir.."+dir.delete());

  20. }
  21. }
复制代码
问题一:
这个程序如果文件里有隐藏文件,执行第一次时,隐藏文件和目录均未删除,但原来文件的隐藏属性都自动消失了,所以多执行几次之后,文件就都删除了,为什么?

我改了一下代码:
  1. public static void removeDir2(File dir)
  2. {
  3. File[] files=dir.listFiles();

  4. for(int x=0; x<files.length; x++)
  5. {
  6. if (files[x].isHidden())   //先判断是否隐藏
  7. continue;
  8. if(files[x].isDirectory())
  9. removeDir(files[x]);
  10. else
  11. System.out.println(files[x].toString()+":-file-:"+files[x].delete());
  12. }
  13. if(dir.length()==0) 先判断目录是否为空,如果为空则删除
  14. {
  15. System.out.println("dir.length:---->"+dir.length());
  16. System.out.println(dir.toString()+"..dir.."+dir.delete());
  17. }

  18. }
复制代码
问题二:
我改了代码之后,如果目录不是隐藏的,但目录里边的文件是都是隐藏的, 那么dir.length()还是0,还会执行删除目录的操作,就会出现 dir:false
那么对于非隐藏目录中的隐藏文件,我怎样判断这个非隐藏的目录是非空的?

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

1 个回复

正序浏览
本帖最后由 温少邦 于 2012-7-5 22:58 编辑

问题一:这个程序如果文件里有隐藏文件,执行第一次时,隐藏文件和目录均未删除,但原来文件的隐藏属性都自动消失了,所以多执行几次之后,文件就都删除了,为什么?
  1. for(int x=0; x<files.length; x++){
  2.         if(!files[x].isHidden()&&files[x].isDirectory())  
  3.                 removeDir2(files[x]);
  4.         else
  5.                 System.out.println(files[x].toString()+":-file-:"+files[x].delete());
  6. }
复制代码
这一段代码,
如果要判断isHidden的话就不能放在if里面了
要这样写
  1. for(int x=0; x<files.length; x++){
  2.         if(!files[x].isHidden())
  3.                 if(files[x].isDirectory())  
  4.                         removeDir(files[x]);
  5.                 else
  6.                         System.out.println(files[x].toString()+":-file-:"+files[x].delete());
  7. }
复制代码
要把判断Hidden放在外面
不然如果文件或目录是隐藏的话,也会执行else里面的语句
会直接尝试删除这个目录或文件

问题二: 我改了代码之后,如果目录不是隐藏的,但目录里边的文件是都是隐藏的, 那么dir.length()还是0,还会执行删除目录的操作,就会出现 dir:false
那么对于非隐藏目录中的隐藏文件,我怎样判断这个非隐藏的目录是非空的?

dir是一个目录,即使里面有不是隐藏的文件
你直接调用dir.length()也会返回0

要判断目录是否为空,就判断files.length是否是0
看看里面有没有东西

不过delete方法删除目录的话 会自动判断目录是否是空
是空才会删除这个目录
所以也不需要自己判断目录是否为空了


评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马