Java 查找两个文件夹中不同文件名的文件

获取A,B两个文件夹下(包含子目录)的所有文件对象,并存储到集合中,然后挑出A文件夹中有而B文件夹没有的文件名,最后打印文件名和路径,具体代码如下:

package com.test;
import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
//打印输出类
public class FindFile {
	public static void main(String[] args) {
	   //过滤后缀名的对象
           FileFilter filterByFile=(FileFilter) new FilterByFile("");//比如后缀名".txt"
           //路径下的文件对象
           File dir = new File("d:\\baidu\\");
           File dir1= new File("d:\\taobao\\");
           //存储文件的list对象
           List<File> list = new ArrayList<File>();
           List<File> list1 = new ArrayList<File>();
           //调用相应方法,添加文件到集合
           list=getFileList(dir,list,filterByFile);
           list1=getFileList(dir1,list1,filterByFile);
           //只存储文件名和文件路径的map对象
           Map<String, String> map0 = new HashMap<String, String>();
           Map<String, String> map1 = new HashMap<String, String>();
           System.out.println("A文件夹的所有文件:"); 
           for(File file:list){
        	   System.out.println(""+file);
        	   map0.put(file.getName(),file.getPath());
           }
           System.out.println("B文件夹的所有文件:");
           for(File file:list1){
        	   System.out.println(""+file);
         	   map1.put(file.getName(),file.getPath());
            }
           map0.keySet().removeAll(map1.keySet());//移除文件名及后缀相同的文件
    	   System.out.println("A文件夹有而B文件夹没有的文件:");
           for(Entry<String, String> entry : map0.entrySet()){
           	  System.out.println(entry.getKey()+"  -->  "+entry.getValue());
           }
           
	}

	private static List<File> getFileList(File dir, List<File> list,FileFilter filterByFile) {
		//遍历路径下的所有文件
		File[] files = dir.listFiles();
		for(File file:files){
			if(file.isDirectory()){
				getFileList(file, list, filterByFile);//如果是目录需要递归
			}else{ 
				if(filterByFile.accept(file))
				list.add(file);
			}
		}
		return list;
	}

}


//过滤器类:
import java.io.File;
import java.io.FileFilter;

public class FilterByFile implements FileFilter {

	public String suffix;

	public FilterByFile(String suffix) {
		super();
		this.suffix = suffix;
	}

	public boolean accept(File pathname) {
		return pathname.getName().endsWith(suffix);
	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值