多线程复制文件

原创 2013年12月04日 10:11:58

 要使用多线程复制,必须使用RandomAccessFile类

 

RandomAccessFile是用来访问那些保存数据记录的文件的,这样你就可以用seek( )方法来访问记录,并进行读写了。这些记录的大小不必相同;但是其大小和位置必须是可知的。行为类似存储在文件系统中一个大型的byte[]数组。
RandomAccessFile竟然会是不属于InputStream和OutputStream类系的。

 

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;

public class MyThread implements Runnable{

	public String filepath = "";
	public String srcfile="";
	public long startposition;
	public long endposition;
	RandomAccessFile file;
	
	public MyThread(String srcfile,String filepath,long startposition,long endposition){
		this.srcfile = srcfile;
		this.filepath = filepath;
		this.startposition = startposition;
		this.endposition = endposition;
	}
	
	@Override
	public void run() {
		FileInputStream fio = null;
		Thread  thread = Thread.currentThread();
		System.out.println(thread.getId());
		
		try {
			fio = new FileInputStream(this.srcfile);
			byte[] temp = new byte[1024];//1k
			int templength;
			fio.skip((int)this.startposition);
			file = new RandomAccessFile(this.filepath,"rw");
			file.seek((int)this.startposition);
			while((templength = fio.read(temp)) > 0 && this.startposition <= this.endposition){
				file.write(temp,0,templength);
				this.startposition = this.endposition;
			}
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			try {
				fio.close();
				file.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		
		
	}
	
}

 

测试 方法

package com;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class UploadFile {

	public static void main(String[] args) {
		
		FileInputStream fio = null;
		String srcfile="c:\\2013年春节放假通知.docx";
		String targetfile = "c:\\huangbiao.docx";
		
		try {
			fio = new FileInputStream(srcfile);
			long length = fio.available();
			System.out.println(length);
			int tnum = (int) (length%(1024*1024)==0?length/(1024*1024):length/(1024*1024)+1);
			for(int i=0;i<tnum;i++){
				MyThread myThread = null;
				if((length-(i-1)*1024*1024)>0){
					myThread = new MyThread(srcfile,targetfile,i*1024*1024,(i+1)*1024*1024-1);
				}else{
					myThread = new MyThread(srcfile,targetfile,i*1024*1024,length);
				}
				Thread thread = new Thread(myThread);
				thread.start();
			}
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			try {
				fio.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		
		
	}

}

 

Linux 多线程文件复制

参考了朋友的设计思想,重新编写了代码实现文件的多线程复制   fcp.h代码: #ifndef __FCP_H #define __FCP_H #define MAX 125 //define ...
  • innobase
  • innobase
  • 2016年05月03日 09:43
  • 613

实习随手记-MFC多线程分解复制文件

// MFCApplication1Dlg.cpp : 实现文件 // #include "stdafx.h" #include "MFCApplication1.h" #include "MFC...
  • wochendaixin
  • wochendaixin
  • 2017年06月02日 17:02
  • 340

多线程去复制一个文件

package com.iotek.iodemo;import java.io.File; import java.io.IOException; import java.io.RandomAcces...
  • xusheng_Mr
  • xusheng_Mr
  • 2017年03月22日 20:31
  • 1092

java多线程复制文件,RandomAccessFile类

package com.wzh.mtd.t20151102; import java.io.FileNotFoundException; import java.io.IOException; im...
  • CJaver
  • CJaver
  • 2015年11月02日 15:53
  • 435

MFC 多线程拷贝文件开始暂停停止和进度条

如图建一个基于对话框   代码如下 一个头文件一个cpp // CopyFileDlg.h : 头文件 // #pragma once #include "afxcmn.h" #inclu...
  • wansichao
  • wansichao
  • 2015年04月30日 15:35
  • 1462

多线程复制文件比单线程慢?

Java多线程拷贝文件测试
  • baidu_25382097
  • baidu_25382097
  • 2017年04月18日 00:09
  • 300

RandomAccessFile关于多线程的一些知识

RandomAccessFile RandomAccessFile是用来访问那些保存数据记录的文件的,你就可以用seek( )方法来访问记录,并进行读写了。这些记录的大小不必相同;但是其大小和位...
  • RuingMan
  • RuingMan
  • 2016年04月10日 19:15
  • 1535

Python中使用多进程复制文件

使用fork()函数创建父子进程,父进程复制文件的前半部分,子进程复制文件的后半部分 #!/usr/bin/python #coding=utf-8 import sys,os #将第一参数作为...
  • Jason_fight
  • Jason_fight
  • 2017年01月09日 19:49
  • 378

MySQL5.7 多线程复制,配置和测试结果

MySQL主从复制的备库延迟一直是非常头疼的问题,MySQL5.7官方版推出多线程复制。但是无独有偶,前期测试MySQL5.7.12, 发现有CRASH的情况,所以一直没有着手研究测试MySQL5.7...
  • zhouchang3
  • zhouchang3
  • 2016年12月05日 21:41
  • 2003

MySQL并发复制系列二:多线程复制

并发复制(Parallel Replication) 系列二: Enhanced Multi-threaded Slaves 作者:沃趣科技MySQL数据库工程师  麻鹏飞 首先梳理下传统...
  • woqutechteam
  • woqutechteam
  • 2016年04月18日 13:13
  • 1385
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:多线程复制文件
举报原因:
原因补充:

(最多只允许输入30个字)