java小程序,用java在指定目录或以及子目录中找出同名文件,java File过滤文件名后找同名文件
主要是使用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过滤文件名后找同名文件的更多相关文章
- copy指定目录下包括子目录中所有的文件
#include <windows.h> #include <iostream> #include <string> using namespace std; DW ...
- 输出多行字符的一个简单JAVA小程序
public class JAVA { public static void main(String[] args) { System.out.println("-------------- ...
- 浏览器兼容java小程序配置说明
最近在使用的一个web应用系统是内嵌了java小程序,遇到了各种浏览器兼容性问题,现梳理如下: 1.通过以下链接检测当前电脑是否已经安装有java https://java.com/zh_CN/dow ...
- 框架一般用作Java应用程序的窗口,而Applet是Java小程序的窗口
框架一般用作Java应用程序的窗口,而Applet是Java小程序的窗口. 与Frame不同,Applet是在网页中显示的,也可以通过添加Panel进行组件布局. package TomAwt; im ...
- 微信小程序开发日记——高仿知乎日报(中)
本人对知乎日报是情有独钟,看我的博客和github就知道了,写了几个不同技术类型的知乎日报APP要做微信小程序首先要对html,css,js有一定的基础,还有对微信小程序的API也要非常熟悉 我将该教 ...
- 写一个PHP函数,实现扫描并打印出指定目录下(含子目录)的所有jpg文件名
写一个PHP函数,实现扫描并打印出指定目录下(含子目录)的所有jpg文件名 <?php $dir = "E:\照片\\";//打印文件夹中所有jpg文件 function p ...
- Python复制指定目录的各个子目录下的同名文件到指定文件夹并重命名
Python复制指定目录的各个子目录下的同名文件到指定文件夹并重命名 #编码类型 #-*- coding: UTF-8 -*- #导入包 import os import shutil srcpath ...
- 2015.11.27初识java一集简单的java小程序
JAVA配置环境变量方法: 1.打开我的电脑--属性--高级--环境变量 2.新建系统变量JAVA_HOME 和CLASSPATH 变量名:JAVA_HOME变量值:D:\Java\jdk1.7.0_ ...
- 【小程序分享篇 一 】开发了个JAVA小程序, 用于清除内存卡或者U盘里的垃圾文件非常有用
有一种场景, 手机内存卡空间被用光了,但又不知道哪个文件占用了太大,一个个文件夹去找又太麻烦,所以我开发了个小程序把手机所有文件(包括路径下所有层次子文件夹下的文件)进行一个排序,这样你就可以找出哪个 ...
随机推荐
- MySQL连接数过多登录不上
[mysqld_safe]socket = /var/run/mysqld/mysqld.socknice = 0 [mysqld]## * Basic Set ...
- ASP入门(二十二)-连接数据库
ADO 简介 在 ASP 中访问数据库使用的 ADO 组件. ADO 是一项微软的技术. ADO 指 ActiveX 数据对象(ActiveX Data Objects). ADO 是微软的 Acti ...
- Tone Mapping算法系列一:基于Fast Bilateral Filtering 算法的 High-Dynamic Range(HDR) 图像显示技术。
一.引言 本人初次接触HDR方面的知识,有描述不正确的地方烦请见谅. 为方便文章描述,引用部分百度中的文章对HDR图像进行简单的描述. 高动态范围图像(High-Dynamic Range,简称HDR ...
- IEngineEditor接口的0x80004003错误
在定制ArcEngine数据编辑程序时,经常使用IEngineEditor 接口来完成开始.保存和停止编辑.但我遇到了一个问题,测试纠结了两天终于解决,我十分佩服自己.嘻嘻. 错误描述 使用IEngi ...
- ActiveMQ面试专题
https://blog.csdn.net/belvine/article/details/79399798
- WPF加载HTML、WPF与JavaScript交互
目录 一.WebBrowser加载远程网页 二.WebBrowser加载本地网页,注:不可以加载本地样式CSS和脚本JS文件 三.WebBrowser隐藏网页的JavaScript错误 四.网页屏蔽鼠 ...
- ZH奶酪:使用PHP调用REST API
原文:http://yuguo.us/weblog/php-rest-api/ 表征状态转移(英文:REpresentational State Transfer,简称REST)是Roy Fieldi ...
- 带你走进EJB--将EJB发布为Webservice(1)
Web service是一个平台独立,松耦合基于可编程的web的应用程序,可使用开放的XML标准来描述.发布.发现.协调和配置这些应用程序,用于开发分布式的互操作的应用程序. 简单说Web servi ...
- Linux和Windows中查看端口占用情况
一.命令 netstat -lnt 或 netstat -tnlp 如: 二.较全 netstat -antulp 三.简单 ss -tanl 或 ss -tanlp 三.补充 Windows中使 ...
- MySql SqlServer Sqlite中关于索引的创建
最近要更新Cocon90.Db库,令其ORM创建表时实现索引的添加.因此总结下列常用Sql,供大家学习与参考. 一.SqlServer中创建索引可以这样: ) Create Table Test ( ...