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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

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

7 个回复

倒序浏览
两个不同路径下的文件夹名字一样如何处理?累加还是打印两个一样名字的?
回复 使用道具 举报
递归,判断是否是文件,是的话,判断后缀是否以.txt结尾,那么就存入一个list集合,并且累加器加1,list集合允许重复,是文件夹的话就listFiles()方法,然后获取里面的文件数组,进行递归
回复 使用道具 举报
复制到目的地先在创建文件夹,但是路径的名字是是目的地路径+文件.getName();然后判断是不是文件夹,是文件夹就递归,是文件就复制
回复 使用道具 举报
别缩话,看代码

[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;
	}
}
回复 使用道具 举报
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:48
7#
flfjewffg 发表于 2016-9-13 13:41
1:要统计个数,首先想到的Map集合,
2:要统计包含文件夹里面的,需要递归
3,确定方法,: 只需要打印,所以没有返 ...

前排膜拜大神
回复 使用道具 举报
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);
        }

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