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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 470620844 中级黑马   /  2016-8-11 11:34  /  1008 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

//需求:删除一个有内容的文件夹。
package day15;

import java.io.File;

public class DiGui {
        public static void main(String[] args) {
                shanChu("D:\\Eclipse\\day15\\新建文件夹");
        }

        public static void shanChu(String string) {
                // TODO Auto-generated method stub
                File file=new File(string);
                File[] files=file.listFiles();
               
                for (File file1:files) {
                       
                        if(file1.isDirectory()){
                                shanChu(file1.toString());
                                System.out.println(file1.getName()+"---"+file1.delete());
                        }
                        else{
                                System.out.println(file1.getName()+"---"+file1.delete());
                        }
                        System.out.println(file.getName()+"---"+file.delete());
                       
                }
               
               
        }

}
以上是自己写的代码,可以实现功能,可是过程不完美,控制台显示
3---true
2---false
3.txt---true
2---true
2---false
1---false
2.txt---true
1---true
1---false
新建文件夹---false
1.txt---true
新建文件夹---true
为什么会有false发生?哪里出了问题?
毕老师的代码没有false发生。这是为啥呢?
package cn.itcast.io.p1.file.test;

import java.io.File;


/*
* 删除一个带内容的目录。
*
* 原理:必须从最里面往外删。
* 需要进行深度遍历。
*
*
*
*/
public class RemoveDirTest {

        /**
         * @param args
         */
        public static void main(String[] args) {

                File dir  = new File("e:\\demodir");
//                dir.delete();
                removeDir(dir);
        }

        public static void removeDir(File dir) {
               
                File[] files = dir.listFiles();
               
                for(File file : files){
                       
                        if(file.isDirectory()){
                                removeDir(file);
                        }else{
                                System.out.println(file+":"+file.delete());
                        }
                }
                System.out.println(dir+":"+dir.delete());
        }
       

}

评分

参与人数 1黑马币 +2 收起 理由
r1503882525 + 2 写的认真,赞一个

查看全部评分

11 个回复

倒序浏览
帮顶
回复 使用道具 举报
      shanChu(file1.toString());                                                //tostring()建议换成getName()
      System.out.println(file1.getName()+"---"+file1.delete());    //请删除这句。。。
回复 使用道具 举报
qetu001212 发表于 2016-8-11 20:47
shanChu(file1.toString());                                                //tostring()建议换成 ...

你是说把
if(file1.isDirectory()){
shanChu(file1.toString());
System.out.println(file1.getName()+"---"+file1.delete());这条语句删了是吧?
试过,删除这句之后文件没了,文件夹都还在。
回复 使用道具 举报
qetu001212 发表于 2016-8-11 20:47
shanChu(file1.toString());                                                //tostring()建议换成 ...

shanChu(file1.toString());    //tostring()建议换成getName()
换成getName()的话,返回的不是绝对路径,而是文件夹或者文件名称,就会抛空指针异常,没办法继续递归了。
回复 使用道具 举报
for (File file1:files) {
                        
                        if(file1.isDirectory()){
                                shanChu(file1.toString());
                                System.out.println(file1.getName()+"---"+file1.delete());//这句话不妥,判断是文件夹之后,再把它当做文件夹传进来递归即可,文件夹里可能还有文件和文件夹不能笼统的删除,也是删不掉的。
                        }
                        else{
                                System.out.println(file1.getName()+"---"+file1.delete());
                        }
                        System.out.println(file.getName()+"---"+file.delete());  //这一句要放在for外面,意思是删除文件夹里所有文件之后就可以删文件夹了。
                        
                }
回复 使用道具 举报
qetu001212 发表于 2016-8-11 20:47
shanChu(file1.toString());                                                //tostring()建议换成 ...

找到原因了,我把删除最外层文件夹语句写到for循环里头了,移出来之后再按你说的把第一条删除语句删掉就ok了。
回复 使用道具 举报
life写实 发表于 2016-8-11 23:03
for (File file1:files) {
                        
                        if(file1.isDirectory()){

确实是这样,厉害
回复 使用道具 举报
if(file1.isDirectory()){
                                shanChu(file1.toString());
                                System.out.println(file1.getName()+"---"+file1.delete());
回复 使用道具 举报
安静的喝会奶 发表于 2016-8-12 13:55
if(file1.isDirectory()){
                                shanChu(file1.toString());
                 ...

java删除是从底层开始删除的,不能直接删除一个非空的文件夹
回复 使用道具 举报
学习学习!
回复 使用道具 举报
赞一个,牛逼
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马