多线程复制文件

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值