线程池统计文件夹内txt文件字符长度并输出最长文件内容

实例:线程池统计文件夹内txt文件字符长度,并输出最长文件内容

 

介绍代码中RandomAccessFile类的作用

 

import java.io.BufferedReader;

import java.io.File;

import java.io.FileReader;

import java.io.FilenameFilter;

import java.io.RandomAccessFile;

import java.io.Reader;

import java.util.concurrent.*;

public class Test2 {

         private static String[] fileName;   //存放文件名

         private static int[] a=new int[100];     //存放文件长度

         private static int length=0;

         public void list(){

               File dirFile = new File("d:/.");

               FileAccept fileAccept = new FileAccept();    //调用自定义的类获取目录

               fileAccept.setExtendName("txt");

               fileName= dirFile.list(fileAccept);             //获取文件名存放在数组

               length=fileName.length;

               System.out.println("总共有    "+length+" 个文件");

         }

         public static void main(String[] args) {

                Test2 t=new Test2();

                t.list();   //调用list方法获取文件目录

                ExecutorService pool= Executors.newFixedThreadPool(length);  //设置线程池的最大线程数

                for(int i=0;i

                         Future future=pool.submit(new Readlength(fileName[i]));         //分配任务 

                         try {

                                a[i]=future.get();    //接收文件长度存入数组

                    }catch (Exception e) {

                                        e.printStackTrace();

                               }

                }

                pool.shutdown();

                while(true){  //执行无线循环直到所有子线程都结束任务

                    if(pool.isTerminated()){ 

                         break; 

                    }

                }

                int xuhao=0;

                int max=0;

                for(int i=0;i比较大小

                         if(max

                                   max=a[i];

                                   xuhao=i;

                         }

                }

                for(int i=0;i

                         System.out.println(fileName[i]+" 的长度为   "+a[i]);

                }

                File file1=new File("D:/"+fileName[xuhao]);     //获取文件对象

                System.out.println(file1.getName()+"  长度最长,内容如下: ");

                      try{

                  Reader fileReader = new FileReader(file1); //调用阅读器,缓冲流读取目标文件,并输出显示

                  BufferedReader in = new BufferedReader(fileReader);

                  String s=null;

                  while((s=in.readLine())!=null) {

                     System.out.println(s);

                  }

                   in.close();

                   fileReader.close();

                }catch (Exception e) {

                            // TODO Auto-generated catch block

                            e.printStackTrace();

                      }

           }

}

class Readlength implements Callable{

         private String filename;

         private int length=0;

         public Readlength(String filename){

                   this.filename=filename;

         }

         @Override

         public Integer call(){

                   // TODO Auto-generated method stub

                   try{

                              File file=new File("D:/"+filename);

                         RandomAccessFile in=new RandomAccessFile(file,"rw");  //调用随机访问文件的函数

                         length=(int) in.length();  //获取文件的长度 

                     

                   }catch(Exception e){}

                   return length;

         }

        

}

class FileAccept implements FilenameFilter {

          private String extendName;

            public void setExtendName(String s) {

               extendName="."+s;

            }

            public boolean accept(File dir,String name) { //重写接口中的方法

               return name.endsWith(extendName);     

            }

}

修改其中的fileAccept.setExtendName("txt"),可以统计各种文件类型长度,自由发挥

作者: yuxiang

线程池统计文件夹内txt文件字符长度并输出最长文件内容_第1张图片见图如见人

你可能感兴趣的:(公开)