获取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);
}
}