黑马程序员技术交流社区

标题: 同学找的题,没思路,递归文件的问题,求大神!! [打印本页]

作者: 岚风    时间: 2016-9-12 18:01
标题: 同学找的题,没思路,递归文件的问题,求大神!!
3.统计D盘下每个文件夹中的.txt文件的个数(包括子文件里的文件),然后将文件夹名称以及该文件夹里.txt文件个数存入到合适的集合中,
         * 并遍历该集合,打印方式如下: xxx文件夹(父文件夹名称即可)-----有x个.txt文件(包括子文件夹里的txt文件个数)

主要是只打印父类文件夹。。。  没任何思路


作者: 小小丶白    时间: 2016-9-12 18:55
两个不同路径下的文件夹名字一样如何处理?累加还是打印两个一样名字的?
作者: MarsBong    时间: 2016-9-12 22:19
递归,判断是否是文件,是的话,判断后缀是否以.txt结尾,那么就存入一个list集合,并且累加器加1,list集合允许重复,是文件夹的话就listFiles()方法,然后获取里面的文件数组,进行递归
作者: kangnam    时间: 2016-9-12 22:25
复制到目的地先在创建文件夹,但是路径的名字是是目的地路径+文件.getName();然后判断是不是文件夹,是文件夹就递归,是文件就复制
作者: kttai    时间: 2016-9-12 23:44
别缩话,看代码

[Java] 纯文本查看 复制代码
package cn.itcast;

import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

/*
* 统计D盘下每个文件夹中的.txt文件的个数(包括子文件里的文件),
* 然后将文件夹名称以及该文件夹里.txt文件个数存入到合适的集合中,
* 并遍历该集合,
* 打印方式如下:
*                  xxx文件夹(父文件夹名称即可)-----有x个.txt文件(包括子文件夹里的txt文件个数)
*/
public class Test01 {

        public static void main(String[] args) {
                File file = new File("D:\\");
                HashMap<String, Integer> fileMap = new HashMap<>();
                int sum = 0;
                extracted(file, fileMap, sum);
                Set<Entry<String, Integer>> entrySet = fileMap.entrySet();
                for (Map.Entry<String, Integer> entry : entrySet) {
                        System.out.println(entry.getKey() + "文件夹-----有" + entry.getValue() + "个.txt文件");
                }
        }

        private static int extracted(File file, HashMap<String, Integer> map, int sum) {
                File[] files = file.listFiles();
                int count = 0;
                for (File file2 : files) {
                        if (file2.isDirectory()) {
                                sum = extracted(file2, map, sum);
                        } else if (file2.isFile()) {
                                String fileName = file2.getName();
                                if (fileName.endsWith(".txt")) {
                                        count++;
                                }
                        }
                }
                map.put(file.getPath(), count + sum);
                return count + sum;
        }
}

作者: flfjewffg    时间: 2016-9-13 13:41
1:要统计个数,首先想到的Map集合,
2:要统计包含文件夹里面的,需要递归
3,确定方法,: 只需要打印,所以没有返回值,因为是递归,所以要传如入集合,

        public static void main(String[] args) {
                        String string = "F:\\";
                        HashMap<String, Integer> mp = new HashMap<>();
                        File fil = new File(string);
                        if(fil.isDirectory()) {
                                getFile(fil,mp);
                        }
                                for (Entry<String, Integer> en : mp.entrySet()) {
                                        System.out.println(en.getKey()+"文件夹有"+en.getValue()+"个txt文件");
                                }
                       
        }
       
        public static void getFile(File fil,HashMap<String, Integer> mp) {
                //获取文件夹的名字
                String sname = fil.getName();
                //拿到文件夹下所有文件的文件名
                File[] fa = fil.listFiles();
                //判断是否为空
                if(fa != null) {
                        //遍历
                        for (File file : fa) {
                                //如果是文件,并且以".txt" 结尾
                                if(file.getName().endsWith(".txt")&&file.isFile()) {
                                        //如果Map集合里面有  就把文件夹名和对映值+1存储  文件夹名也就是键会自动覆盖
                                        if(mp.containsKey(sname)){
                                                mp.put(sname, mp.get(sname)+1);
                                        } else{
                                                //没有就把值存为1
                                                mp.put(sname, 1);
                                        }
                                        //如果是文件夹,递归调用
                                } else if (file.isDirectory()){
                                       
                                        getFile(file,mp);
                                }
                        }
                       
                }
               
        }
               
}

作者: 岚风    时间: 2016-9-13 18:24
flfjewffg 发表于 2016-9-13 13:41
1:要统计个数,首先想到的Map集合,
2:要统计包含文件夹里面的,需要递归
3,确定方法,: 只需要打印,所以没有返 ...

前排膜拜大神
作者: 不羁的码农    时间: 2016-9-13 19:16
public class Test {
        /**
         * @param args
         * @throws Exception
         */
        public static void main(String[] args) throws Exception {
                File oldPath = new File("D:\\oldPath");
                File newPath = new File("D:\\newPath");

                move(oldPath, newPath,"txt");
        }

        private static void move(File oldPath, File newPath,String name) throws Exception {
                ArrayList<String> alist = new ArrayList<>();
                File[] files = oldPath.listFiles();
                newPath.mkdirs();
                for (File file : files) {
                        if (file.isFile() && file.getName().endsWith(name)) {
                                alist.add(file.getName());
                                BufferedInputStream bis = new BufferedInputStream(
                                                new FileInputStream(file));
                                BufferedOutputStream bos = new BufferedOutputStream(
                                                new FileOutputStream(new File(newPath, file.getName())));
                                int a;
                                while((a=bis.read())!=-1){
                                        bos.write(a);
                                }
                                bis.close();
                                bos.close();
                        }
                }
                System.out.println(alist);
        }

}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2