`
oywl2008
  • 浏览: 1052184 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

检索文件内容,并将含有要检索内容的文件及目录结构拷贝到指定目录下(源代码)

 
阅读更多

在网上找了好半天都没有找到相关的小工具,最后没有办法了,自己动手写了一个,留作以后用。

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->package com.duxiu.app;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.nio.channels.FileChannel;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class FileUtil {

    
private String fileName;// 要检索的文件名称,可以是正则表达式
    private String path;// 源文件(要检索的)路径
    private String copyToPath;// 检索后,要复制到目的路径
    private String fileEncode;// 要检索文件的编码
    private String searchContent;// 要检索文件的内容,可以是正则表达式

    
public FileUtil(String fileName, String fileEncode, String searchContent, String path, String copyToPath) {
        
this.fileName = fileName;
        
this.fileEncode = fileEncode;
        
this.path = path;
        
this.searchContent = searchContent;
        
if (!copyToPath.endsWith("\\"&& !copyToPath.endsWith("/")) {
            copyToPath 
+= "\\";
        }
        
this.copyToPath = copyToPath;
    }

    
public void DrawFiles() {
        File file 
= new File(path);
        
if (!file.exists()) {
            
return;
        }

        File[] fileLists 
= file.listFiles();
        searchFile(fileLists);
    }

    
/**
     * 递归检索文件
     * 
     * 
@param fileLists
     
*/
    
protected void searchFile(File[] fileLists) {
        
if (fileLists == null || fileLists.length < 1) {
            
return;
        }

        
for (File file : fileLists) {
            
if (file.isDirectory()) {// 是目录,进行递归循环
                File[] files = file.listFiles();
                searchFile(files);
            }

            
if (file.isFile()) {// 是文件,匹配要检索的文件名
                String fn = file.getName();
                Pattern pattern 
= Pattern.compile(fileName, Pattern.CASE_INSENSITIVE);
                Matcher matcher 
= pattern.matcher(fn);
                
if (matcher.find()) {
                    
if (findFileContent(file)) {
                        String srcPath 
= file.getAbsolutePath();
                        srcPath 
= srcPath.substring(srcPath.indexOf("\\"+ 1, srcPath.lastIndexOf("\\"+ 1);
                        File dstFile 
= new File(copyToPath + srcPath);
                        
if (!dstFile.exists()) {
                            dstFile.mkdirs();
                        }
                        dstFile 
= new File(copyToPath + srcPath + file.getName());
                        copyFile2(file, dstFile);
                    }
                }
            }
        }
    }

    
/**
     * 检索文件内容
     * 
     * 
@param file
     * 
@return
     
*/
    
protected boolean findFileContent(File file) {
        
boolean isFind = false;
        
try {
            FileInputStream fileInput 
= new FileInputStream(file);
            InputStreamReader inputStrReader 
= new InputStreamReader(fileInput, fileEncode);
            BufferedReader buffereReader 
= new BufferedReader(inputStrReader);
            StringBuilder sb 
= new StringBuilder();
            String line 
= "";
            
while ((line = buffereReader.readLine()) != null) {
                sb.append(line).append(
"\r\n");
            }
            buffereReader.close();
            inputStrReader.close();
            fileInput.close();

            Pattern pattern 
= Pattern.compile(searchContent, Pattern.CASE_INSENSITIVE);
            Matcher matcher 
= pattern.matcher(sb);
            
if (matcher.find()) {
                isFind 
= true;
            }
        } 
catch (Exception e) {
            System.out.println(file.getAbsolutePath() 
+ "/" + file.getName() + "  read error:" + e.getMessage());
        }

        
return isFind;
    }

    
/**
     * 拷贝文件
     * 
     * 
@param src
     * 
@param dest
     
*/
    
public void copyFile2(File src, File dest) {
        
try {
            
// Create channel on the source
            FileChannel srcChannel = new FileInputStream(src).getChannel();

            
// Create channel on the destination
            FileChannel dstChannel = new FileOutputStream(dest).getChannel();

            
// Copy file contents from source to destination
            dstChannel.transferFrom(srcChannel, 0, srcChannel.size());

            
// Close the channels
            srcChannel.close();
            dstChannel.close();
        } 
catch (IOException e) {
            e.printStackTrace();
        }

    }

    
/**
     * 对UTF-8编辑的文件拷贝有问题
     * 
     * 
@param src
     * 
@param dst
     
*/
    @Deprecated
    
public void copyFile(File src, File dst) {
        
int BUFFER_SIZE = 1024 * 2;
        
try {
            InputStream in 
= null;
            OutputStream out 
= null;
            
try {
                in 
= new BufferedInputStream(new FileInputStream(src), BUFFER_SIZE);
                out 
= new BufferedOutputStream(new FileOutputStream(dst), BUFFER_SIZE);
                
byte[] buffer = new byte[BUFFER_SIZE];
                
while (in.read(buffer) > 0) {
                    out.write(buffer);
                }
            } 
finally {
                
if (null != in) {
                    in.close();
                }
                
if (null != out) {
                    out.close();
                }
            }
        } 
catch (Exception e) {
            e.printStackTrace();
        }
    }

    
public String getFileName() {
        
return fileName;
    }

    
public void setFileName(String fileName) {
        
this.fileName = fileName;
    }

    
public String getPath() {
        
return path;
    }

    
public void setPath(String path) {
        
this.path = path;
    }

    
public String getCopyToPath() {
        
return copyToPath;
    }

    
public void setCopyToPath(String copyToPath) {
        
this.copyToPath = copyToPath;
    }

    
public static void main(String[] args) {
        String fileName 
= "index.jsp";
        String path 
= "F:\\project\\eclipse33workspace\\DuxiuAbo\\ROOT\\areas";
        String copyToPath 
= "D:\\simone";
        String fileEncode 
= "utf-8";
        String searchContent 
= "/javascript/area/inc.js";
        FileUtil fileUtil 
= new FileUtil(fileName, fileEncode, searchContent, path, copyToPath);
        fileUtil.DrawFiles();

    }
}

 

摘自:http://www.blogjava.net/wangxinsh55/archive/2009/11/11/301993.html

 

 

分享到:
评论

相关推荐

    "VB_dduve" VB读取 CAD DWG 文件 参考源代码 及 OCX

    此主题涉及到的“VB_dduve”是一个利用VB来读取CAD(Computer-Aided Design)DWG(Drawing)文件的参考源代码和OCX(ActiveX Control)组件。OCX是微软开发的一种控件技术,可以被嵌入到应用程序中,以提供特定的...

    JAVA上百实例源码以及开源项目源代码

    Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个...

    VS2010 ASP.NET C# WEB开发(源代码)

    7. **文件拷贝**:将所有项目文件拷贝到新建的项目文件夹中,是为了确保所有必要的组件和依赖都在正确的位置,以便于在VS2010中正确加载和运行项目。 8. **项目打开与编辑**:在VS2010中打开项目,开发者可以编辑源...

    memcached源代码分析

    **memcached源代码分析** **一、memcached简介** memcached是一款高性能、分布式内存对象缓存系统,用于在分布式环境中快速存储和检索数据。它通过将数据存储在内存中,提高了应用程序的性能,减少了对数据库的...

    autoit写的一个文件搜索工具

    此外,“想深入学习autoit的可以看一看”意味着通过研究这个工具的源代码,初学者可以学习到AutoIt的许多实用技巧和高级用法,这对于想要提升AutoIt编程技能的人来说是一个宝贵的资源。 “免费的哦”表明这个工具是...

    语义关联词汇检索系统Beta版

    内容简介:用Netbeans基于Java开发的语义关联词汇检索原型系统,内含源代码,数据库、jar包等. 包含了: (1)选择1个词汇,可以列出语义关系的其它词汇; (2)计算第1个与第2个词汇之间的语义距离。 (3)数据库...

    数据库原理课程设计-图书管理系统源代码(Myeclipse+SQL2005)

    《数据库原理课程设计——图书管理系统源代码解析》 在学习数据库原理时,课程设计往往是一项重要的实践环节。这里我们关注的是一个基于Myeclipse集成开发环境和SQL Server 2005数据库的图书管理系统源代码。这个...

    数据结构C++描述--STL源代码

    "数据结构C++描述--STL源代码"这本书可能会涵盖STL的实现细节、设计模式以及如何在实际项目中有效利用STL等内容。对于有C++基础,特别是对标准模版库有一定了解的开发者来说,这是一本非常有价值的参考书。通过阅读...

    《Java程序设计》实验9[文].pdf

    编写一个`FileOperate`类,实现创建目录、清空目录、列出目录内容、按后缀名筛选文件、搜索文件和拷贝文件等方法。这要求对文件系统的操作有深入理解。 **实验目的与要求** 1. 理解数据流的含义。 2. 了解Java流的...

    dircopy.rar_源码

    描述中的 "一个目录拷贝的源码例子,可以整个目录检索和拷贝" 提到的功能是,该程序不仅能够复制目录下的所有文件,还包括子目录及其包含的所有内容。这通常涉及到递归算法,即程序会遍历目录结构,对每个找到的子...

    操作系统-文件系统.ppt

    文件系统的主要功能包括按名存取文件、建立和维护文件目录、文件查找和定位、存储空间的分配和管理、提供文件存取方法、实现文件共享、保护和保密,以及提供用户友好的操作命令和与设备管理的接口。文件目录通常包含...

    memcache源代码分析

    7. **性能优化**:memcached的设计目标是极致的性能,因此在源代码中可以看到许多性能优化策略,如内存预分配、零拷贝技术以及最小化系统调用等。 8. **分布式特性**:虽然memcached本身是单进程的,但在分布式环境...

    Visual C++实效编程百例光盘源代码

     实例69 快速检索指定文件   实例70 拷贝、删除和移动文件   实例71 读写INI文件   实例72 读写大块资料(二进制)文件   实例73 文件变更通知  第8章 数据库   实例74 格式化数字   实例75 ...

    vc++ 开发实例源码包

    3:可以在不下载ZIP.RAR.ISO文件的情况下查看文件里面的目录文件. 4:支持多语言. 5:操作综合其它软件. 6:自定义快捷键. 7:在IE工具栏上加按钮,可以直接拖动连接到按钮上下载. 8:注册采用激活方式. 9:采用Messenger的...

    《Java程序设计》实验9定义.pdf

    - 实验一:使用`System.in.read()`读取用户输入的字节数据,并将其保存到数组,然后写入到指定文件。 - 实验二:比较`FileInputStream`和`FileReader`读取文件的性能差异。 - 实验三:使用文件输入流读取特定文本...

    利用 Heritrix 构建特定站点爬虫

    本章节将详细介绍如何在Eclipse环境下搭建Heritrix开发环境,包括类库导入、源代码拷贝、配置文件修改及运行参数设置等内容。 ##### 1. 导入类库 Heritrix运行所需的类库位于`heritrix-1.14.4-src\lib`目录下,...

    vc++ 应用源码包_5

    我想知道的人就多了,其实暴风影音就是Media Player Classic,暴风影音只是同我一样从Gabest官方下载到了Media Player Classic的源码,不同的是,暴风影音将Media Player Classic改成了自己的名字并加入了许多的解码器,...

    LDA+C+代码(Zhou Li)

    2. **拷贝文件**:将压缩包中的所有源代码文件(可能包括`lda.cc`和其他头文件等)复制到工程的工作目录。 3. **添加头文件和源文件**:在工程设置中,你需要将这些文件添加到工程的源文件列表中,这样编译器就知道...

    Linux常用指令讲解.pdf

    /usr/bin存放应用程序,/usr/sbin存放管理程序,/usr/include存放开发和编译应用程序所需的头文件,/usr/share/man存放帮助文档,/usr/lib存放常用的动态链接库和软件包配置文件,/usr/src则是Linux内核的源代码。...

Global site tag (gtag.js) - Google Analytics