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. springboot-条件化注解

    在项目中,有时会遇到我们的Configuration.Bean.Service等等的bean组件需要依条件按需加载的情况.那么Spring Boot怎么做的呢?它为此定义了许多有趣的条件,当我们将它们 ...

  2. bash/shell的字符串trim实现

    #!/bin/sh trim() {     trimmed=$1     trimmed=${trimmed%% }     trimmed=${trimmed## }     echo $trim ...

  3. Storm的wordCounter计数器详解

    原文:http://www.maoxiangyi.cn/index.php/archives/362 拓扑 点击(此处)折叠或打开 package cn.jd.storm; import backty ...

  4. Binder的工作机制浅析

    在Android开发中,Binder主要用于Service中,包括AIDL和Messenger,其中Messenger的底层实现就是AIDL,所以我们这里通过AIDL来分析一下Binder的工作机制. ...

  5. jQuery高级

    一.动画效果 常用的几种效果都是没有easing参数的,也即动画只能swing.$(selector).animate(styles,speed,easing,callback)中是有easing参数 ...

  6. 15分XX秒后订单自动关闭(倒计时)

    //订单记录 function get_order(){ //请求订单ajax方法 XX.send_api("method",{data},function(){ var date ...

  7. ASP.NET Core依赖注入最佳实践,提示&技巧

    分享翻译一篇Abp框架作者(Halil İbrahim Kalkan)关于ASP.NET Core依赖注入的博文. 在本文中,我将分享我在ASP.NET Core应用程序中使用依赖注入的经验和建议. ...

  8. Android学习笔记 TextSwitcher文本切换组件的使用

    activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&qu ...

  9. 第八篇 Python异常

    程序在运行时,如果Python解释器遇到一个错误,会停止程序的执行,并且提示一些错误信息,这就是异常,程序通知执行并且提示错误信息,这个动作,我们通常称之为:抛出异常. 1.简单的捕获异常的语法 在程 ...

  10. 关联关系的接口+unittest实现关联接口

    关联关系的接口: import requests def login(): url = 'http://ip/api/user/login' data = {'username':'niuhang', ...