zoukankan      html  css  js  c++  java
  • Java 多线程查找文件中的内容

    学过了操作系统,突然不知道多线程有什么用了。

    看了一下百度,发现多线程,可以提升系统利用率

    在系统进行IO操作的时候,CPU可以处理一些其他的东西,等IO读取到内存后,CPU再处理之前的操作。

    总之可以在用户层面,可以提升效率,不过,有时候多线程设计不当,调试也很麻烦

    今天尝试一下简单的查找文件后缀以txt 里的内容 demo

    SeachFileContent类,用来查询文件内容

    package thread;
    
    import java.io.File;
    import java.io.IOException;
    
    public class SeachFileContent {
    
        public static void main(String[] args) {
            File file = new File("D://TT//Draymonder");
            if(!file.exists()) {
                try {
                    file.createNewFile();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }else {
                String content="复制";
                searchFileContent(file,content);
            }
        }
    
        public static void searchFileContent(File file, String content) {
            if(file.isFile()) {
                if(file.getName().toLowerCase().endsWith(".txt")) {
                    new SearchFileThread(file, content).start();
                }
            }
            if(file.isDirectory()) {
                File[] files = file.listFiles();
                for(File singlefile : files) {
                    searchFileContent(singlefile, content);
                }
            }
        }
    }

    SearchFileThread类,用来多线程处理文件内容的查询

    package thread;
    
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.IOException;
    
    public class SearchFileThread extends Thread {
        private File file;
        private String content;
        SearchFileThread() {}
        
        SearchFileThread(File file, String content) {
            this.file = file;
            this.content = content;
        }
        
        private String getFileContent(File file) {
            try(FileReader fileReader = new FileReader(file)) {
                char []all = new char[(int)file.length()];
                fileReader.read(all);
                return new String(all);
            }catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                return null;
            }
        }
    @Override
    public void run() { String str = getFileContent(this.file); if(null != str) { if(str.contains(this.content)) { System.out.printf("在%s中含有 目标串"%s" ...%n",this.file.getName(),this.content); } } } }
  • 相关阅读:
    xcode快捷键大全(转)
    a 和an 的用法区别
    如何在lion系统下安装Xcode 3.2.x版本
    xcode3.2.6升级至4.0.2经验加教训总结(转)
    堆与栈的关系与区别(转)
    [点评]谷歌发布Android 2.3 点评八大亮点
    浅谈关于nil和 null区别及相关问题(转)
    ObjectiveC中的继承与复合技术(转)
    MyEclipse 8.0.0 in Fedora 12
    如何判断两个链表相交及找到第一个相交点
  • 原文地址:https://www.cnblogs.com/Draymonder/p/9565110.html
Copyright © 2011-2022 走看看