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


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

    问题描述:

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

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

    解题思路:

    先用 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();
        }
    
    }

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

  • 相关阅读:
    H5页面引用百度地图绘制车辆历史轨迹
    js 银行卡号校验
    PC页面客服微信QQ弹窗(鼠标移入显示移出隐藏)
    js 识别二维码
    js 生成二维码
    apicloud APP沉浸式状态栏设置
    微信公众号页面video标签播放视频兼容问题
    EasyUI 导出数据表格 (Export DataGrid)
    c#部署程式到服務器插入數據到oracleDB亂碼
    asp.net JS使用MVC下載(導出Excel)
  • 原文地址:https://www.cnblogs.com/liyuanba/p/2017-02-13.html
Copyright © 2020-2023  润新知