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盘里的垃圾文件非常有用
有一种场景, 手机内存卡空间被用光了,但又不知道哪个文件占用了太大,一个个文件夹去找又太麻烦,所以我开发了个小程序把手机所有文件(包括路径下所有层次子文件夹下的文件)进行一个排序,这样你就可以找出哪个 ...
随机推荐
- 如何在编辑器里添加CSS或JS代码
//编辑器里代码模式下的代码 <scripttype="text/javascript"> //my code.... </script> //编辑器里可视 ...
- Discuz! X3安装第三方主题出现:对不起,您安装的不是正版应用..的解决方法
discuz 社区在更新到3.0以上后,增加了对插件的版本检测,在安装时,可能会出现:“对不起,您安装的不是正版应用,安装程序无法继续执行”的提示,要解决这个其实挺容易的,找到以下文件: /sourc ...
- MySQL数据库设置远程访问权限方法小结
http://www.jb51.net/article/42441.htm MySQL基础知识第一期,如何远程访问MySQL数据库设置权限方法总结,讨论访问单个数据库,全部数据库,指定用户访问,设置访 ...
- C/C++——程序的内存分配
C/C++程序内存分配 一.预备知识-程序的内存分配 一个由c/C++编译的程序占用的内存分为下面几个部分 1.栈区(stack):由编译器自己主动分配释放 ,存放函数的參数值,局部变量的值等.其操作 ...
- Linux下设置进程使用指定核的CPU
一.原因: 我们不能任由操作系统负载均衡,因为我们自己更了解自己的程序,所以,我们可以手动地为其分配CPU核,而不会过多地占用CPU0,或是让我们关键进程和一堆别的进程挤在一起. 二.查看方法: 1. ...
- 在TQ2440开发板上ping 127.0.0.1不通
问题:在TQ2440上ping 127.0.0.1,提示错误 ping: sendto: Network is unreachable 解决方法:ifconfig lo 127.0.0.1 up ...
- cocoahttpserver使用具体解释(二)
接下来,我们接着去学习怎样去接收处理web上传的数据 1 首先我们创建一个 @interface WTZHTTPConnection : HTTPConnection 在这个类中我们用于处理接受文件并 ...
- Linux下pppoe设置
在Linux下配置pppoe,一般有以下步骤: 1. 安装pppoe软件.这个不多说,ape-get install pppoe即可. 2. 设置拨号属性: [cpp] view plain copy ...
- Maven让资源文件处理插件能够解析资源文件中的Maven属性
<build> <resources> <resource> <directory>${project.basedir}/src/main/resour ...
- ROS中发布IMU传感器消息
下面使用SYD Dynamics的9轴AHRS(Attitude and heading reference system),来发布sensor_msgs/Imu类型的消息. 将传感器用USB转串口接 ...