多线程复制文件

来源:互联网 发布:php 权限管理 数据 编辑:程序博客网 时间:2024/05/16 11:24
package DemoThingTset;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.RandomAccessFile;class LoadThread implements Runnable {String sourceFile;String targetFile;int threadNo;int threadNum;int bufferSize = 1024;long fileSize;public LoadThread(String sourceFile, String targetFile, int threadNo,int threadNum) {super();this.sourceFile = sourceFile;this.targetFile = targetFile;this.threadNo = threadNo;this.threadNum = threadNum;}public void run() {File file = new File(sourceFile);FileInputStream randin = null;//选用FileInputStream是因为其有skip方法,但其没有length方法RandomAccessFile randout = null;//选用RandomAccessFile是因为其有seek方法try {randin = new FileInputStream(file);long blockSize = file.length()/threadNum;long startPoint = blockSize*threadNo;byte[] buffer = new byte[bufferSize];randout = new RandomAccessFile(targetFile, "rw");//出于各种原因,在Android手机调用 skip 方法最终跳过的字节数可能更少一些,所以以此修正// long at = startPoint;// while(at > 0){//long amt = randin.skip(at);//if(amt == -1){//throw new RuntimeException();//}//at -= amt;// }////randin.skip(at);  //        randout.seek(at);        randin.skip(startPoint);          randout.seek(startPoint);                int temp;        while ((temp=randin.read(buffer))>=0) {randout.write(buffer, 0, temp);}} catch (Exception e) {e.printStackTrace();}finally{try {randin.close();randout.close();} catch (Exception e2) {e2.printStackTrace();}}}}public class DemoTest {public static void main(String args[]) throws IOException {String sourceFile="D:/Downloads/aliedit.exe";String targetFile="D:/Downloads/aliedit3.exe";int threadNo;int threadNum=3;for(threadNo=0;threadNo<=threadNum;threadNo++){new Thread(new LoadThread(sourceFile,targetFile,threadNo,threadNum)).start(); }}}

0 0
原创粉丝点击