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盘里的垃圾文件非常有用
有一种场景, 手机内存卡空间被用光了,但又不知道哪个文件占用了太大,一个个文件夹去找又太麻烦,所以我开发了个小程序把手机所有文件(包括路径下所有层次子文件夹下的文件)进行一个排序,这样你就可以找出哪个 ...
随机推荐
- ASP入门(十二)-Application对象
在一起协同工作以完成某项任务的一组ASP文件称为一个应用程序.Application 对象用于把这些文件捆绑在一起. Application 对象用于在整个应用程序生存期间保存信息. Applicat ...
- conEmu的使用笔记
1.如何让conEmu成为windows的默认控制台程序? 解决:选中settings > Integration > Default Term里的Force ConEmu as defa ...
- Solidworks直接打开SWB文件报错怎么办
- Android中创建PopupMenu弹出式菜单
之前写过一篇创建option menu的文章:Android中创建option menu 本文主要是讲如何创建PopupMenu弹出式菜单 1.首先创建menu文件menu2.xml: <?xm ...
- HTML页面跳转的5种方式
下面列了五个例子来详细说明,这几个例子的主要功能是:在5秒后,自动跳转到同目录下的hello.html(根据自己需要自行修改)文件. 1) html的实现 <head> <!-- 以 ...
- 使用PyInstaller打包Python角本为exe程序
一.经过测试 在Windows平台请使用Windows平台的pyinstaller,Linux平台请使用Linux平台的Pyinstall角本. 二.命令如下: pyinstaller -F --ic ...
- JAVA遍历HashMap和ArrayList
List Map 基础信息 HashMap 最近写程序经常需要遍历集合,所以总结一下内容: 一.简单实现 Map map = new HashMap(); for(Object o : map.key ...
- mahout基于Hadoop的CF代码分析(转)
来自:http://www.codesky.net/article/201206/171862.html mahout的taste框架是协同过滤算法的实现.它支持DataModel,如文件.数据库.N ...
- JDK5.0 特性-线程同步装置之Semaphore
来自:http://www.cnblogs.com/taven/archive/2011/12/17/2291474.html import java.util.ArrayList; import j ...
- npm 主要命令
本文主要参考自:http://www.runoob.com/nodejs/nodejs-npm.html 1.使用 npm 命令安装模块 $ npm install express var expre ...