主要是使用java API“java.io.File”实现

一个简单的类,copy出来,因main方法可直接运行。

 package com.paic.icore.pams.auto.util;

 import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry; /**
* @author White lion
*
*/
public class FindSameFile {
static int filterFilesCount=0,filterFileNamesCount=0;
static List<String> filterFiles = new ArrayList<String>(),filterFileNames = new ArrayList<String>();
static Map<String, Object> sameFileNames = new HashMap<String, Object>(),fileNames = new HashMap<String, Object>();
static File root,aRoot,bRoot; //execue init data
static{
filterFileNames.add("svn-");
filterFileNames.add("index.html"); filterFiles.add(".svn");
filterFiles.add("image");
filterFiles.add("htmlDemo"); //目录A
aRoot = new File("E:/Software/src/webroot");
//目录B
bRoot = new File("D:/Software/webroot"); root = new File("E:/Software/src/webroot");
} //execue
public static void main(String[] args) {
long start =System.currentTimeMillis();
// findFile(root, fileNames, null, null);
findSameFileName(aRoot,bRoot);
System.out.println("耗时:"+(System.currentTimeMillis()-start)+"ms,sameFileNames count:" + sameFileNames.size()+",fileNames count:" + fileNames.size()+",filterFilesCount:" + filterFilesCount+",filterFileNamesCount:" + filterFileNamesCount);
} public static void findSameFileName(File aRoot, File bRoot) {
long start =System.currentTimeMillis();
Map<String, Object> aFileNames = new HashMap<String, Object>();
findFile(aRoot,aFileNames,filterFiles,filterFileNames); Map<String, Object> bFileNames = new HashMap<String, Object>();
findFile(bRoot,bFileNames,filterFiles,filterFileNames); System.out.println(aRoot+" list:\n"+aFileNames.keySet());
System.out.println(bRoot+" list:\n"+bFileNames.keySet()); Iterator<Entry<String, Object>> iterator;
Map<String, Object> stayFindFileNames = new HashMap<String, Object>();
if(aFileNames.size() >= bFileNames.size()){
iterator=aFileNames.entrySet().iterator();
stayFindFileNames=bFileNames;
}else{
iterator=bFileNames.entrySet().iterator();
stayFindFileNames=aFileNames;
} while (iterator.hasNext()) {
Entry<String, Object> next = iterator.next();
String key = next.getKey();
Object value = next.getValue(); if(null!=stayFindFileNames.get(key)){
Object stayObj = stayFindFileNames.get(key); if(value instanceof java.io.File){
File a = (File) value;
addFileToSameFileNamesBox(stayObj, a);
}else if(value instanceof List){
List<File> list = (List<File>) value;
for (File f : list) {
addFileToSameFileNamesBox(stayObj, f);
} } } }
System.out.println("findSameFileName 耗时:"+(System.currentTimeMillis()-start)+"ms,sameFileNames count:" + sameFileNames.size()+",sameFileNames list:\n" + sameFileNames.keySet());
} public static void findFile(File root, Map<String, Object> fileNames,List<String> filterFiles,List<String> filterFileNames) {
if (root.exists() && root.isDirectory()) {
for (File file : root.listFiles()) {
if (file.isFile()) {
if(null!=filterFileNames){
int tmpFilterFileNamesCount=filterFileNamesCount;
for (String filter : filterFileNames) {
if(file.getName().indexOf(filter)>-1){
filterFileNamesCount++;
System.out.println("filter fileName1:"+file.getPath());//这里输出文件名!
break;
}
}
if(tmpFilterFileNamesCount<filterFileNamesCount) continue;
}
if(null!=fileNames.get(file.getName())){
Object value = fileNames.get(file.getName());
if(value instanceof java.io.File){
File b = (File) value;
List<File> list = new ArrayList<File>();
fileNames.put(b.getName(), list);
list.add(b);
list.add(file);
}else if(value instanceof List){
List<File> b = (List<File>) value;
b.add(file);
}
}else{
fileNames.put(file.getName(), file);
}
// System.out.println("find:"+file.getPath());//这里输出文件名!
} else if (file.isDirectory()) {
if(null!=filterFiles){
if(filterFiles.contains(file.getName())){
filterFilesCount++;
System.out.println("filter file2:"+file.getPath());//这里输出文件名!
continue;
}
}
findFile(file, fileNames, filterFiles, filterFileNames);
} }
} } public static void addFileToSameFileNamesBox(File file) {
if(null!=sameFileNames.get(file.getName())){
Object value = sameFileNames.get(file.getName());
if(value instanceof java.io.File){
File b = (File) value;
List<File> list = new ArrayList<File>();
sameFileNames.put(b.getName(), list);
list.add(b);
list.add(file);
}else if(value instanceof List){
List<File> b = (List<File>) value;
b.add(file);
}
}else{
sameFileNames.put(file.getName(), file);
}
} public static void addFileToSameFileNamesBox(Object stayObj, File file) {
if(stayObj instanceof java.io.File){
File stayFile = (File) stayObj;
if(stayFile.getName().equals(file.getName())){
addFileToSameFileNamesBox(stayFile);
}
}else if(stayObj instanceof List){
List<File> list = (List<File>) stayObj;
for (File f : list) {
if(f.getName().equals(file.getName())){
addFileToSameFileNamesBox(f);
}
}
}
} }

java小程序,用java在指定目录或以及子目录中找出同名文件,java File过滤文件名后找同名文件的更多相关文章

  1. copy指定目录下包括子目录中所有的文件

    #include <windows.h> #include <iostream> #include <string> using namespace std; DW ...

  2. 输出多行字符的一个简单JAVA小程序

    public class JAVA { public static void main(String[] args) { System.out.println("-------------- ...

  3. 浏览器兼容java小程序配置说明

    最近在使用的一个web应用系统是内嵌了java小程序,遇到了各种浏览器兼容性问题,现梳理如下: 1.通过以下链接检测当前电脑是否已经安装有java https://java.com/zh_CN/dow ...

  4. 框架一般用作Java应用程序的窗口,而Applet是Java小程序的窗口

    框架一般用作Java应用程序的窗口,而Applet是Java小程序的窗口. 与Frame不同,Applet是在网页中显示的,也可以通过添加Panel进行组件布局. package TomAwt; im ...

  5. 微信小程序开发日记——高仿知乎日报(中)

    本人对知乎日报是情有独钟,看我的博客和github就知道了,写了几个不同技术类型的知乎日报APP要做微信小程序首先要对html,css,js有一定的基础,还有对微信小程序的API也要非常熟悉 我将该教 ...

  6. 写一个PHP函数,实现扫描并打印出指定目录下(含子目录)的所有jpg文件名

    写一个PHP函数,实现扫描并打印出指定目录下(含子目录)的所有jpg文件名 <?php $dir = "E:\照片\\";//打印文件夹中所有jpg文件 function p ...

  7. Python复制指定目录的各个子目录下的同名文件到指定文件夹并重命名

    Python复制指定目录的各个子目录下的同名文件到指定文件夹并重命名 #编码类型 #-*- coding: UTF-8 -*- #导入包 import os import shutil srcpath ...

  8. 2015.11.27初识java一集简单的java小程序

    JAVA配置环境变量方法: 1.打开我的电脑--属性--高级--环境变量 2.新建系统变量JAVA_HOME 和CLASSPATH 变量名:JAVA_HOME变量值:D:\Java\jdk1.7.0_ ...

  9. 【小程序分享篇 一 】开发了个JAVA小程序, 用于清除内存卡或者U盘里的垃圾文件非常有用

    有一种场景, 手机内存卡空间被用光了,但又不知道哪个文件占用了太大,一个个文件夹去找又太麻烦,所以我开发了个小程序把手机所有文件(包括路径下所有层次子文件夹下的文件)进行一个排序,这样你就可以找出哪个 ...

随机推荐

  1. Linux命令行极简教程

    1.命令行真的好吗 程序员的使命 维基百科的解释: 命令行界面(英语:command-line interface,缩写:CLI)是在图形用户界面得到普及之前使用最为广泛的用户界面,它通常不支持鼠标, ...

  2. VS2008 解决Unable to copy file 对路径的访问被拒绝。

    在VS2008 + WINDOWS 7 环境下重新生成解决方案时遇到以下问题 Unable to delete file "F:\XX.exe". 对路径"F:\XX.e ...

  3. 转:查看linux系统版本号

    转自: http://blog.csdn.net/zhuying_linux/article/details/6859286 lsb_release -a

  4. 例子:使用Grunt创建一个Node.js类库

      创建一个文件夹. 打开命令行或者powershell, 运行npm init,根据提示填入package的信息. 在文件夹中创建index.js文件. /*! * mymongolib * Cop ...

  5. 解决 IE6 背景缓存

    解决 IE6 背景缓存 <!--[if IE 6]><script type="text/javascript">document.execCommand( ...

  6. 牛客网-《剑指offer》-包含min函数的栈

    题目:http://www.nowcoder.com/practice/4c776177d2c04c2494f2555c9fcc1e49 辅助栈 C++ class Solution { public ...

  7. 微信小程序 - tabbar动态更换图标以及文字

    大家不喜欢小程序的tabbar原因之一就是它太死板,tabbar一旦在app.json定义以后文字不能改,图标不能改! 我要自制tabbar!!! 其实在微信更新完1.9.0基础调试以后就推出了更新方 ...

  8. EFI/UEFI BIOS启动

    全局唯一标识分区表(GUID Partition Table,缩写:GPT)是一个实体硬盘的分区结构.它是可扩展固件接口标准的一部分,用来替代BIOS中的主开机纪录分区表.但因为MBR分区表不支持容量 ...

  9. 001-Go JSON处理

    在golang中提供的encoding/json包可以编码JSON以及解码JSON数据. 1.编码JSON 使用json包中的Marshal函数进行编码,源码如下: func Marshal(v in ...

  10. Java 生成ZIP文件

    public static byte[] fileToZip(){ ZipOutputStream append = null; ByteArrayOutputStream bos = new Byt ...