在大量文件中找到所需要的所有信息,放入一个新文件中

在大量文件中搜索信息,并统一到一个文件中

问题描述:

给定一个文件夹,文件夹中包含有很多的子文件夹,子文件夹中有多个不同的文件,在这些文件中找到指定的信息,并把这些信息收集起来放入新生成的文件中,以方便查询。

这里所用的例子是,考生考试时产生的答案的文件夹,每个考生做不同的几道题,不同考生可以做相同的题,每道题生成一个文件,共有上万个文件,从这些文件中提取出所有考生的某道题的答案,例如高斯日记的答案,放入到一个新生成的文件中,要求,相同的答案只放一个即可。

解题思路:

先用 new File("考试_源程序")找到所要查询的文件夹(考试_源程序)的位置并打开,指用new PrintWriter("MyTest.txt")定位置创建一个新的文件(MyTest.txt)。然后一层一层打开该文件夹,这里提供的文件夹共有四层。打开之后,在每一个.txt文件中找到“高斯日记”这个关键词,在这个含有“高斯日记”的文件夹中的最后一行就是该同学所做的题的答案,把它记录下来,为了使答案不重复,这里先把答案加入到了Set里。然后再把Set里的东西一句一句写到MyTest.txt中。

//2017-03-22 by 迷糊狐狸
import java.io.File;
import java.io.PrintWriter;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

public class MyWork {
    
    //一层一层打开文件夹
    static void f(File a, PrintWriter pw) throws Exception{
        //准备一个Set放所需要的信息
        Set<String> set = new HashSet<String>();
        
        File[] f = a.listFiles();
        for(File it: f){
            File[] ff = it.listFiles();
            for(File it2: ff){
                File[] fff = it2.listFiles();
                for(File it3: fff){
                    //把所有的".txt"文件打开看看
                    if(it3.getName().indexOf(".txt")>=0) worker(it3,set,pw);
                }
            }
        }
        worker2(set,pw);
    }
    
    //把传进来的".txt"文件查一下,看看里边是否有高斯日记这道题
    static void worker(File f,Set set, PrintWriter pw) throws Exception{
        Scanner scan = new Scanner(f,"utf-8");
        try{
            while(scan.hasNext()){
                String s = scan.nextLine();
                if(s.contains("Problem = 高斯日记")){
                    
                    //找到了之后就把答案放入到之前准备的Set里
                    //找不到就换下一个文件
                    while(scan.hasNext()){
                        s = scan.nextLine();
                        if(s.trim().length()<=0)continue;
                        if(s.contains("//")) continue;
                        s = s.trim();
                        set.add(s);
                    }
                }
            }
        }finally{
            //看完之后要把文件关闭
            scan.close();
        }
    }
    
    //把Set里的元素全部写入到之前生成的文件中
    static void worker2(Set<String> set, PrintWriter pw) throws Exception{
        for(String s: set){
            pw.write(s);
            pw.println();
        }
    }

    public static void main(String[] args) throws Exception{
        //找到所需文件
        File a = new File("D:\新建文件夹\学生答卷\考试__源程序");
        //指定位置生成一个文件
        PrintWriter pw = new PrintWriter("D:\新建文件夹\正式"
                        + "\作业\2017年3月\2017-03-22\MyTest.txt");
        //开始工作
        f(a,pw);
        pw.flush();
    }

}

 最后生成的文件以及文件内容:

原文地址:https://www.cnblogs.com/liyuanba/p/2017-02-13.html