線程池統計文件夾內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<length;i++) {                  

                         Future<Integer> 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<fileName.length;i++){               //比較大小

                         if(max<a[i]){

                                   max=a[i];

                                   xuhao=i;

                         }

                }

                for(int i=0;i<length;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<Integer>{

         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

哈哈哈見圖如見人

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章