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. 前端mock利器:randomjson

    randomjson的应用场景 前后端分离时,前端根据后端提供的数据模型模拟后端请求.如果数据写死,每次返回的都一样,这个时候randomjson就能派上用场了.在前端规定数据类型,每次用random ...

  2. APUE(1)----UNIX基础知识

    一.UNIX体系结构 所有操作系统都为他们所运行的程序提供服务,典型的服务包括:执行新程序.打开文件.读文件.分配存储区等.严格意义上来说,操作系统可以定义为一种软件,它控制计算机硬件资源,提供程序运 ...

  3. mxnet 线性模型

    mxnet 线性模型 li {list-style-type:decimal;}ol.wiz-list-level2 > li {list-style-type:lower-latin;}ol. ...

  4. 合成(Composite)模式

    一. 合成(Composite)模式 合成模式有时又叫做部分-整体模式(Part-Whole).合成模式将对象组织到树结构中,可以用来描述整体与部分的关系. 合成模式可以使客户端将单纯元素与复合元素同 ...

  5. April Fools Day Contest 2019 A. Thanos Sort

    A. Thanos Sort time limit per test 1 second memory limit per test 256 megabytes input standard input ...

  6. css 引入的方式有哪些, link和@import的区别是什么

    有四种形式: 1.链入外部样式表,就是把样式表保存为一个样式表文件,然后在页面中用<link rel = "stylesheet" type="text/css&q ...

  7. Windows下Python第三方.whl的安装

    1.改成.zip 2.解压 3.然后把解压出来的文件放到C:\Python27\Lib\site-packages下即可.

  8. Spark大数据处理 之 从WordCount看Spark大数据处理的核心机制(1)

    大数据处理肯定是分布式的了,那就面临着几个核心问题:可扩展性,负载均衡,容错处理.Spark是如何处理这些问题的呢?接着上一篇的"动手写WordCount",今天要做的就是透过这个 ...

  9. 跟我一起读postgresql源码(三)——Rewrite(查询重写模块)

    上一篇博文我们阅读了postgresql中查询分析模块的源码.查询分析模块对前台送来的命令进行词法分析.语法分析和语义分析后获得对应的查询树(Query).在获得查询树之后,程序开始对查询树进行查询重 ...

  10. WinForm中如何实现在容器控件中嵌入form窗体(panel与子窗体)

    今天在做项目时候遇到一个问题,窗体分为左右两部分,要求在左边栏点击按钮时,右边动态加载窗体最后想到用panel实现,经历几次失败,并查找资料后,终于搞定 说明:如果多次切换需加入 panel.clea ...