多线程读取文件

来源:互联网 发布:淘宝店铺购买可以吗 编辑:程序博客网 时间:2024/06/03 14:52

  • 利用多线程读取文件,并写到另外一个文件

    ReadWriteFile类,继承Runnable
    package com.chbai.entity;/*** * ReadWriteFile *  * author: chbai */import java.io.FileNotFoundException;import java.io.IOException;import java.io.RandomAccessFile;public class ReadWriteFile implements Runnable{private String source;private String dest;private int threadnum;private int buflen = 1024 * 1024;public ReadWriteFile(String source,String dest,int threadnum){this.source = source;this.dest = dest;this.threadnum = threadnum;}@Overridepublic void run() {int id = Integer.valueOf(Thread.currentThread().getName());byte buffer[] = new byte[buflen];try {RandomAccessFile reader = new RandomAccessFile(source, "r");RandomAccessFile writer = new RandomAccessFile(dest, "rw");long alone = reader.length() % threadnum == 0 ? reader.length()/ threadnum : ((int) (Math.ceil((double) reader.length()/ threadnum)));long begin = id * alone; reader.seek(begin);writer.seek(begin);long end = (begin + alone) > reader.length() ? reader.length() : (begin + alone);while (begin < end) {int len = 0;if (begin + buflen < end) {len = reader.read(buffer);} else {len = reader.read(buffer, 0, (int) (end - begin));}writer.write(buffer, 0, len);begin += len;}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}

    BatchReadWriteFile类
    package com.chbai.entity;public class BatchReadWriteFile {private int threadnum;private String source;private String dest;private final static int THREAD_NUM = 5;public BatchReadWriteFile(String source, String dest, int threadnum){this.source = source;this.dest = dest;this.threadnum = (threadnum < 1) ? THREAD_NUM : threadnum;}public BatchReadWriteFile(String source, String dest){this.source = source;this.dest = dest;this.threadnum = THREAD_NUM;}public void begin(){for(int i = 0 ; i < threadnum; i++ ){Thread thread = new Thread(new ReadWriteFile(source,dest,threadnum));thread.setName(i+"");thread.start();}}}

    BatchReadWriteFileTest类
    package com.chbai.test;import com.chbai.entity.BatchReadWriteFile;public class BatchReadWriteFileTest {public static void main(String[] args) {BatchReadWriteFile batch = new BatchReadWriteFile("D:\\RUNNING.txt","D:\\RUNNING2.txt");batch.begin();}}