介绍代码中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
比较大小 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