文件搜索小工具

package o.o.utils;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

/*
 * author:Micky
 * version:1.0.0
 * Date:2017年8月18日 下午11:46:15
 */
public class FileUtils {

    /*
     * @parameter 指定路径filePath,指定文件名 fileName
     *
     * @return 匹配文件的具体文件路径的列表
     */
    public List<String> containFileName(String filePath, String fileName) {
        List<String> filePathList = new ArrayList<String>();
        File dir = new File(filePath);
        List<File> files = new ArrayList<File>();
        if (dir.isDirectory()) {
            files = getterAllFiles(dir);
            files.stream().filter(f -> f.getName().contains(fileName))
                    .forEach(f -> filePathList.add(f.getAbsolutePath()));
        } else if (dir.isFile() && dir.getName().contains(fileName)) {
            filePathList.add(dir.getAbsolutePath());
        }
        return filePathList;
    }

    /*
     * 递归得到指定路径下的所有文件
     */
    public List<File> getterAllFiles(File dir) {
        List<File> files = new ArrayList<File>();
        List<File> childfiles = Arrays.asList(dir.listFiles());
        childfiles.stream().forEach(f -> {
            if (f.isDirectory()) {
                files.addAll(getterAllFiles(f));
            } else {
                files.add(f);
            }
        });
        return files;
    }

    /*
     * @parameter 指定路径filePath,指定字符串specialString
     *
     * @return 包含特殊字段的文件的具体文件路径的列表
     */
    public List<String> containSpecialString(String filePath,
            String specialString) {
        List<String> filePathList = new ArrayList<String>();
        File dir = new File(filePath);
        List<File> files = new ArrayList<File>();
        if (dir.isDirectory()) {
            files = getterAllFiles(dir);
            files.stream().filter(f -> isContainSpecialStr(f, specialString))
                    .forEach(f -> filePathList.add(f.getAbsolutePath()));
        } else if (dir.isFile() && isContainSpecialStr(dir, specialString)) {
            filePathList.add(dir.getAbsolutePath());
        }
        return filePathList;
    }

    public boolean isContainSpecialStr(File file, String str) {
        String strLine = "";
        boolean flag = false;
        try {
            BufferedReader bufferedReader = new BufferedReader(
                    new InputStreamReader(new FileInputStream(file)));
            while ((strLine = bufferedReader.readLine()) != null) {
                if (strLine.contains(str)) {
                    flag = true;
                }
            }
            if (bufferedReader != null)
                bufferedReader.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return flag;
    }

    /*
     * @parameter 指定具体文件以及所含特殊字段
     *
     * @return 指定字段所在文件路径及其在文件中的行数以及行具体信息的嵌套map
     */

    public Map<String, Map<Integer, String>> containSpecialStringReturnMap(
            String filePath, String specialString) {
        Map<String, Map<Integer, String>> filePathMap = new HashMap<>();
        File dir = new File(filePath);
        List<File> files = new ArrayList<File>();
        if (dir.isDirectory()) {
            files = getterAllFiles(dir);
            files.stream()
                    .filter(f -> isContainSpecialStr(f, specialString))
                    .forEach(
                            f -> filePathMap.put(f.getAbsolutePath(),
                                    containSpecialStrInfo(f, specialString)));
        } else if (dir.isFile() && isContainSpecialStr(dir, specialString)) {
            filePathMap.put(dir.getAbsolutePath(),
                    containSpecialStrInfo(dir, specialString));
        }
        return filePathMap;
    }

    /*
     * @parameter 指定具体文件以及所含特殊字段
     *
     * @return 指定字段在文件中的行数以及行具体信息的map
     */
    public Map<Integer, String> containSpecialStrInfo(File file, String str) {
        Map<Integer, String> specialStrInfo = new LinkedHashMap<>();
        if (file.isDirectory()) {
            return specialStrInfo;
        }

        String strLine = "";
        try {
            BufferedReader bufferedReader = new BufferedReader(
                    new InputStreamReader(new FileInputStream(file)));
            int row = 1;
            while ((strLine = bufferedReader.readLine()) != null) {
                if (strLine.contains(str)) {
                    specialStrInfo.put(row, strLine);
                }
                row++;
            }
            if (bufferedReader != null)
                bufferedReader.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return specialStrInfo;
    }
}
时间: 2024-07-28 13:41:35

文件搜索小工具的相关文章

用C#Winform写个简单的批量清空文件内容和删除文件的小工具

用C#Winform写个简单的批量清空文件内容和删除文件的小工具 本文介绍这个简单得不能再简单的小项目.做这个项目,有以下目的. 1 当然是做个能用的工具 2 学习使用Github 关于用VS2013创建一个项目并添加到Github的教程,请参考(http://www.admin10000.com/document/4004.html).简单来说,就是先用VS创建项目:然后在Github网站上创建一个Respo(本项目的代码托管项目),记下(https://*.git)那个地址:最后用"提交&q

自己写的 根据编码搜索文件的小工具

文件.目录搜索的小工具 用正则式限制文件名.关键字.目录 开始是专门为了搜索GBK和UTF8两种编码的文件,现在可以制定多种编码方式来搜索文件 本科生,代码可能很不规范 因为windows下好像没有grep,win7默认的搜索用起来也不习惯,search my file也不支持搜索中文,所以开始试着按自己想法尝试写这个东西用来搜源码文件. https://github.com/wo4li2wang/MSearcher 参数 ? -f ?搜索的文件夹,可以用正则式表示? -k ?搜索文件包含的关键

强大的pdf文件操作小工具——PDFtk的小白用法

前言 作为程序员,大家都知道的,总是会被技术小白问各种跟编程没什么关系的硬件.软件问题.曾经被一技术小白同事问到有没有什么办法合并pdf文件,当时自己也是一头雾水,因为自己工作生活很少会去操作pdf文件,而当时公司对开发人员的电脑权限管理很严格,不论是上网还是安装软件,都受到很大限制,最后硬着头皮忙活了一阵子也没在解决. 前两天在写批处理程序的时候,发现批处理程序是有合并文件的命令的,我忽然想起之前这个同事的问题,就试了一下合并pdf,然而并不行.虽然失落了一下,但本着学习的精神还是百度了一下关

csv文件生成小工具

运维经常遇到客户要求下载某些数据列表的需求.一般我们是提供一个csv格式的文件. 如果用shell来做这件事的,通常是两种方法: 1.捕获终端输出,后续对输出做一定处理.但是终端输出实际上已经丢失了很多格式信息,很难做到完善处理. 2.用mysql内置的FILE命令一次性生成文件.mysql内置的函数功能有限,没法做到比较好的输出格式化. 所以选择了python来做. 主要注意几点: 1.我们的数据库是使用utf8编码.所以生成的csv文件默认话就是utf8编码.实际上也不应该转码,因为utf8

局域网内基于UDP的文件传输小工具

一.目标 基于UDP来设计一个文件传输的小工具,以此来了解UDP协议的特点. 内容: 基本要求: 输入对方IP地址,对方如果存在,可以给对方发送文件. 扩展要求: (1)工具具有友好的用户界面: (2)局域网内使用该工具的两台主机可以互相进行文字通信: (3)自动按照一定频率扫描局域网内其他开启了该工具的主机,并在界面上用列表显示出来: (4)传输文件和文字内容时,直接选择界面上已经显示出来的存活主机,不需要手动输入IP地址. 二.设计实现 环境: Ubuntu14.04+Gcc4.8+Ecli

C#文件复制小工具

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 using System; using System.Collections.Generic; u

【游戏开发】Excel表格批量转换成CSV的小工具

一.前言 在工作的过程中,我们有时可能会面临将Excel表格转换成CSV格式文件的需求.这尤其在游戏开发中体现的最为明显,策划的数据文档大多是一些Excel表格,且不说这些表格在游戏中读取的速度,但就论占用内存来说,同样的数据量Excel表格所占用的内存要远远大于CSV,因此将Excel转换成CSV势在必行.如果单单转换一个Excel表格还好,直接另存为就搞定的,但是如何将一个文件下的N个Execl表格转成CSV呢?今天马三就来和大家一起用Python撸一个Excel表格批量转换CSV的小工具—

Linux学习第八篇之文件搜索命令find

一.find命令:(Windows搜索小工具推荐——Everything) 命令名称:find 命令所在路径:/bin/find 执行权限:所有用户 语法:find [搜索范围] [匹配条件] 功能描述:文件搜索 二.find命令的例子: 1.find /etc -name init 在目录/etc中查找文件init(会在子目录下的文件继续搜索init),-name 搜索条件的选项,文件名是全匹配的,模糊搜索可用通配符处理,如find /etc -name *init*,如果报find: pat

Find Any File for Mac(文件搜索软件)

Find Any File for Mac是应用在Mac上的一款文件搜索工具,Find Any File Mac可以通过名称.创建或修改日期,大小或类型和创建者代码(而不是内容)在本地磁盘上搜索文件.您甚至可以搜索未由Spotlight编入索引的磁盘,包括服务器卷.macdown分享find any file 破解版下载,需要的朋友,欢迎来macdown下载使用. https://www.macdown.com find any file mac软件简介 Find Any File for Ma