主要是使用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. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(七)针对hadoop2.9.0启动DataManager失败问题

    DataManager启动失败 启动过程中发现一个问题:slave1,slave2,slave3都是只启动了DataNode,而DataManager并没有启动: [spark@slave1 hado ...

  2. artTemplate 简洁语法版

    引用简洁语法的引擎版本,例如: <script src="dist/template.js"></script> 下载 表达式 {{ 与 }} 符号包裹起来 ...

  3. (纪录片)你必须知道的科学 The Science That You Have To Know (2014)

    简介: 类型: 纪录片制片国家/地区: 英国语言: 英语上映日期: 2014-2片长: 150分钟 主要内容: 你有没有认真想过,自己的身体有多奇妙?人体是世间最复杂的一项工程杰作,他也带来了一些非常 ...

  4. CentOS7安装Docker与使用篇

    一.在CentOS7上安装Docker篇 1. 查看系统版本: $ cat /etc/redhat-release CentOS Linux release 7.0.1406 (Core) 2. 安装 ...

  5. AngularJS中移动页面滚动穿透解决方案

    ()] + s[]) >= , preventDefault: false, click: IscrollAndroidBug.click() }); var _ele = document.g ...

  6. ActiveMQ 基于zookeeper的主从(levelDB Master/Slave)搭建以及Spring-boot下使用

    0:说明 ActiveMQ 5.9.0新推出的主从实现,基于zookeeper来选举出一个master,其他节点自动作为slave实时同步消息.因为有实时同步数据的slave的存在,master不用担 ...

  7. java 对视频和图片进行加密解密[转]

    是时候回到文件加密与解密的具体实现这个主题上来了.后续的举例均采用图片(包括GIF动画)类型,而其他类型资源的实现原理相同,就不一一给出了.首先来看对一幅JPG类型图片进行异或加密的Java实现,由于 ...

  8. JAVA GC优化入门

    为什么需要优化GC? JAVA的GC是面试必考的题目,可是在实际项目中什么时候使用GC哪?或者应该什么时候优化GC哪?有句名言:“GC优化永远是最后一项任务”. 在使用GC之前,应该考虑一下进行GC的 ...

  9. tortoisegit 右键无图标

    如果你安装 TortoiseGit之后,发现文件夹或文件左上角就是不显示图标,那么以下步骤就是最好的解决办法. 工具/原料   TortoiseGit 方法/步骤     确认是不是64bit 系统上 ...

  10. PASCAL知识

    API Index http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delph ...