package test1;

import java.io.*;
import java.util.ArrayList;
import java.util.List;

/**
* Created by 本地账户登录-xiaoCong on 2017/1/2.
*/
public class FileSearch {
// out/production/Java/test1/Test1.class
// E:\\IntelliJ\\Java\\out\\production\\Java\\test1
// public static String fileName = "";
// public static String srcPath = "";
// public static String desPath = "";

//public static String fileName = "Test1.class";
public static String fileName = "HasStatic.class";
// public static String fileName = "Test1.class";
public static String srcPath = "E:\\IntelliJ\\Java\\out\\production\\Java";
//todo 注意,使用中最后的斜杠一定要,不然会跟文件名拼在一起
public static String desPath = "E:\\IntelliJ\\Java\\out\\production\\Java\\sort\\";

public static void main(String[] args) {
FileSearch fileSearch = new FileSearch();

//List<File> fileList = fs.searchFile("a.jpg", "E:\\huaxin\\fivechess");
//List<File> fileList = fileSearch.searchFile(fileName, srcPath);
List<File> fileList = fileSearch.searchFile(fileName, srcPath );

if (0!=fileList.size()) {
for (File file : fileList ) {
fileSearch.cutFileTo(file,desPath);
}
}
}

public void cutFileTo(File file, String desPath) {
//this.cutFile(file, new File(desPath + fileName));
//this.cutFile(file, new File(desPath + fileName+new Date()));
//SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:ss:ss");

// UUID uuid = UUID.randomUUID();
// this.cutFile(file, new File(desPath+uuid.toString()+fileName));

String strFile = file.toString();
this.cutFile(file, new File(desPath + strFile.substring(strFile.lastIndexOf("\\"))));
}

//todo 剪切功能没实现
public void cutFile(File srcFile, File file2) {
InputStream inputStream = null;
FileOutputStream fileOutputStream = null;
byte[] bytes = new byte[1024];
int temp = 0;
try {
inputStream = new FileInputStream(srcFile);
fileOutputStream = new FileOutputStream(file2);
while ((temp = inputStream.read(bytes)) != -1) {
fileOutputStream.write(bytes, 0, temp);
fileOutputStream.flush();
}
//todo 这里应该删除原来的,srcFile 没删除成功
srcFile.delete();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fileOutputStream != null) {
try {
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

public List<File> searchFile(String strFileName, String path) {
return this.searchFile(fileName, srcPath , new ArrayList<File>() );
}

//"Chess.java"
public List<File> searchFile(String strFileName, String path, List<File> fileList ) {
// List<File> fileList = new ArrayList<>();

// 关联文件对象
File file = new File(path);
// 判断当前file是文件还是文件夹,是文件就输出文件绝对地址,是路径就继续查找
//todo 判断是否是文件夹
if (file.isFile()) {//是文件,或者用 !file.isDirectory()
//if (file.getName().equals(strFileName)) { //判断查出的文件名和初始的文件名是否相同,相同就打印,不同就往下一级继续查询
//模糊匹配
if (file.getName().contains(strFileName)) {
//将符合条件的地址打印在JTextArea中
//todo
fileList.add(file);
// this.cutFilesTo(file,desPath);
// System.out.println(file.getAbsolutePath());
}
} else {//是文件夹,递归
File[] files = file.listFiles();
if (files != null) {
for (int i = 0; i < files.length; i++) {
// 将其中的文件夹遍历出来,并调用searchFile方法的调用
File childFile = files[i];
searchFile( strFileName,childFile.getAbsolutePath(),fileList);//这里用递归的思想,在方法中再调这个方法,完成在下一级目录的查询,一直到找出所有符合条件的文件
}
}
}

return fileList;
}

}

FileSearch.java的更多相关文章

  1. Java spi机制浅谈

    最近看到公司的一些框架和之前看到的开源的一些框架的一些服务发现和接入都采用了java的spi机制. 所以简单的总结下java spi机制的思想. 我们系统里抽象的各个模块,往往有很多不同的实现方案,比 ...

  2. Java中的SPI(Service Provider Interface)

    转自:http://singleant.iteye.com/blog/1497259 最近看到公司的一些框架和之前看到的开源的一些框架的一些服务发现和接入都采用了java的spi机制. 所以简单的总结 ...

  3. Solr4.8.0源码分析(7)之Solr SPI

    Solr4.8.0源码分析(7)之Solr SPI 查看Solr源码时候会发现,每一个package都会由对应的resources. 如下图所示: 一时对这玩意好奇了,看了文档以后才发现,这个serv ...

  4. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  5. java中的SPI机制

    1 SPI机制简介 SPI的全名为Service Provider Interface.大多数开发人员可能不熟悉,因为这个是针对厂商或者插件的.在java.util.ServiceLoader的文档里 ...

  6. java 深入技术一

    1. myeclipse和debug调试 1)myeclipse重命名 包和类,方法,字段的重命名 重构,refactor-rename 方法,右键refactor-rename,按回车就重命名 Al ...

  7. Java 7 Concurrency Cookbook 翻译 第一章 线程管理之二

    三.中断一个线程 一个拥有多个线程的Java程序要结束,需要满足两个条件之一:一是所有的非后台线程都执行结束了:二是某个线程执行了 System.exit() 方法.当你想要终结一个运行中的Java程 ...

  8. java内存泄露的理解与解决(转)

    Java内存管理机制 在C++语言中,如果需要动态分配一块内存,程序员需要负责这块内存的整个生命周期.从申请分配.到使用.再到最后的释放.这样的过程非常灵活,但是却十分繁琐,程序员很容易由于疏忽而忘记 ...

  9. Java并发学习之十九——线程同步工具之Phaser

    本文是学习网络上的文章时的总结.感谢大家无私的分享. JDK 1.7 加入了一个新的工具Phaser.Phaser的在功能上与CountDownLatch有部分重合. 以下使用Phaser类来同步3个 ...

随机推荐

  1. Position Independent Code (PIC) in shared libraries

    E原文地址:http://eli.thegreenplace.net/2011/11/03/position-independent-code-pic-in-shared-libraries/下一文: ...

  2. C#序列化xml,开发常用

    序列化操作对于开发人员来说最熟悉不过了. 序列化分为:序列化和反序列化. 序列化名词解释:序列化是将对象状态转换为可保持或传输的格式的过程. 与序列化相对的是反序列化,它将流转换为对象.这两个过程结合 ...

  3. 希尔伯特空间(Hilbert Space)是什么?

    希尔伯特空间是老希在解决无穷维线性方程组时提出的概念, 原来的线性代数理论都是基于有限维欧几里得空间的, 无法适用, 这迫使老希去思考无穷维欧几里得空间, 也就是无穷序列空间的性质. 大家知道, 在一 ...

  4. Java Thread.join()详解--父线程等待子线程结束后再结束

    目录(?)[+] 阅读目录 一.使用方式. 二.为什么要用join()方法 三.join方法的作用 join 四.用实例来理解 打印结果: 打印结果: 五.从源码看join()方法   join是Th ...

  5. 备忘录(Memento)模式

    *备忘录模式(Memento):在不破坏封装性的前提下,捕获一个对戏的内部状态, * 并在该对象之外保存这个状态.这样以后就能恢复到原来保存的状态 *Originator(发起人): 负责创建一个备忘 ...

  6. Boosting and Its Application in LTR

    1 Boosting概述 2 Classification and Regression Tree 3 AdaBoost 3.1 算法框架 3.2 原理:Additive Modeling 4 Gra ...

  7. asp.net core 外部认证多站点模式实现

    PS:之前因为需要扩展了微信和QQ的认证,使得网站是可以使用QQ和微信直接登录.github 传送门 .然后有小伙伴问,能否让这个配置信息(appid, appsecret)按需改变,而不是在 Con ...

  8. Springcloud踩坑记---使用feignclient远程调用服务404

    公司项目进行微服务改造,由之前的dubbo改用SpringCloud,微服务之间通过FeignClient进行调用,今天在测试的时候,eureka注册中心有相应的服务,但feignclient就是无法 ...

  9. 【BZOJ2839】集合计数 容斥原理+组合数

    Description 一个有N个元素的集合有2^N个不同子集(包含空集),现在要在这2^N个集合中取出若干集合(至少一个),使得 它们的交集的元素个数为K,求取法的方案数,答案模1000000007 ...

  10. C# 动态创建实例化泛型对象,实例化新对象 new()

    普通类实现字符串创建实例: var type =Assembly.Load("SqlSugar").GetType("SqlSugar.SqlServerDb" ...