古詩詞大全網 - 成語大全 - java 怎麽用10個線程去讀取文件夾裏100個txt文件中的內容,讀完之後同步寫到壹個文件中去。

java 怎麽用10個線程去讀取文件夾裏100個txt文件中的內容,讀完之後同步寫到壹個文件中去。

這個是我寫的三個類,用於多線程操作讀取文件內容和寫入文件內容,不知道是不是妳合妳味口。

________________第壹個類______讀取內容__寫入內容____________________

package pro;

import java.io.*;

public class ReadFileToWriteOtherFile {

private File oldFile;

private File newFile;

private BufferedReader br;

private BufferedWriter bw;

private String totalString="";

private Boolean flag=true; //用於標記文件名是否存在 true表示存在

public ReadFileToWriteOtherFile()

{

oldFile=null;

newFile=null;

br=null;

bw=null;

System.out.println("初始化成功");

}

public void readInfoFromFile(String fileName)

{

System.out.println("開始讀取");

try

{

oldFile=new File(fileName);

if(oldFile.exists()) //如果文件存在

{

System.out.println("存在");

br=new BufferedReader(new FileReader(oldFile));

String info=br.readLine(); //讀取壹行

while(info!=null)

{

totalString+=info; //將讀取到的壹行添加到totalString中

info=br.readLine(); //再讀取下壹行

//System.out.println(totalString);

}

System.out.println("讀取完成,準備寫入…………");

}

else //如果文件不存在

{

System.out.println("文件不存在");

flag=false; //標記該文件不存在

}

// System.out.println("totalString="+totalString);

}

catch(FileNotFoundException e)

{

System.out.println(e);System.out.println("開始讀取中1");

}

catch(IOException e)

{System.out.println(e);System.out.println("開始讀取中2");}

}

public void writeInfoToFile(String fileName)

{

if(!flag) //如果標記前面的文件不存在,則return

{

flag=true; //改回原來的文件標記符

return;

}

try

{

newFile=new File(fileName);

if(newFile.exists()) //如果存在,不用創建新文件

{

System.out.println("文件存在,可以寫入!");

}

else //如果不存在,則創建壹個新文件

{

System.out.println("文件不存在,準備創建新文件");

newFile.createNewFile();

System.out.println("文件創建成功,可以寫入");

}

bw=new BufferedWriter(new FileWriter(newFile,true));

// System.out.println("totalString="+totalString);

bw.write(totalString,0,totalString.length());

bw.flush(); //刷新緩沖區

System.out.println("寫入完成");

totalString="\r\t"; //清空原來的字符串

}

catch(FileNotFoundException e)

{System.out.println(e);}

catch(IOException e)

{System.out.println(e);}

}

}

________________第二個類______壹個自定義的線程類____________________

package pro;

import java.lang.Thread;

public class MyThread extends Thread

{

private int index; //用於數組的位置

private String[] fileNames; //定義壹個字符串數組

ReadFileToWriteOtherFile bftwo=new ReadFileToWriteOtherFile(); //定義前面的自定義類

public MyThread(String[] fileNames,int index) //index表示數組位置標號

{

this.index=index;

this.fileNames=fileNames;

}

public void run()

{

bftwo.readInfoFromFile(fileNames[index]);//傳入數組中的字符串參數

bftwo.writeInfoToFile("b.txt"); //傳入寫入的目的地文件

//index++; //數組位置加1

System.out.println("==============");//分隔線

}

}

________________第三個類______主程序____________________

package pro;

//import org.springframework.context.ApplicationContext;

//import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.io.*;

public class BeanRunApp {

/**

* Method main

*

*

* @param args

*

*/

public static void main(String[] args)

{

/* ApplicationContext apc=new ClassPathXmlApplicationContext("beans.xml");

ClassRoom croom=(ClassRoom)apc.getBean("classRoom");

croom.out();

System.out.println("over");

*/

long startTime=System.currentTimeMillis();

String[] a={"a.txt","c.txt","d.txt","e.txt"}; //用壹個符品數組保存文件名

for(int i=0;i<a.length;i++) //用數組的長度來作為循環條件

{ //把這個數組和i的值作為構造函數傳入線程類

MyThread myth=new MyThread(a,i);

System.out.println("--------------------------------");

myth.start(); //執行

System.out.println("當前的線程是:"+myth.getName());

}

long endTime=System.currentTimeMillis();

System.out.println("耗時:"+(endTime-startTime)+"毫秒");

}

}