多線程復制一個文件


需求:多個線程復制一個文件(ZIP文件)到另一個文件里。

package cn.ba.watchFile.downLoadFile.downDemo.singleFile;

import java.io.File;
import java.util.Date;

/**
 * 復制文件
 * n個線程
 * @author Administrator
 *
 */
public class TestFileCopy {
    public static void main(String[] args) {
        File src = new File("F:/zip/145-088865366-330700-330700-1499140617-51881.zip");  
        File tar = new File("F:/zipbck");  
        int n=5;
        Date startDate = new Date();
        // 分幾部分復制  
        for (int i = 0; i < n; i++) {// 每一部分的編號  
            new Thread(new FileCopy(src, tar, n, i)).start();  
        } 
        System.out.println("復制文件用"+n+"線程,用時:"+(new Date().getTime()-startDate.getTime()));
    }
}

 

 

package cn.ba.watchFile.downLoadFile.downDemo.singleFile;

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

public class FileCopy implements Runnable{
     private File src;// 源文件  
        private File tar;// 目標文件  
        private int n;// 分幾部分  
        private int no;// 每部分的編號  
      
        public FileCopy(File src, File tar, int n, int no) {  
            this.src = src;  
            this.tar = tar;  
            this.n = n;  
            this.no = no;  
        }  

    @Override
    public void run() {
        // TODO Auto-generated method stub
        try {  
            RandomAccessFile rafsrc = new RandomAccessFile(src, "r");  
            String fileName = src.getName();
            tar=new File(tar+File.separator+fileName);
            RandomAccessFile raftar = new RandomAccessFile(tar, "rw");  
            long len = src.length();  
            long size = len % n == 0 ? len / n : len / n + 1;// 每部分的字節數  
            byte[] b = new byte[1024 * 8];// 每次讀取的文件大小  
            int num = 0;// 每次讀取的字節數  
            long start = size * no;// 讀寫的起始位置  
            rafsrc.seek(start);  
            raftar.seek(start);  
            int sum = 0;// 累加每次讀取個數  
            while ((num = rafsrc.read(b)) != -1 && sum < size) {  
                raftar.write(b, 0, num);  
                sum += num;  
            }  
  
        } catch (FileNotFoundException e) {  
            e.printStackTrace();  
        } catch (IOException e1) {  
            // TODO Auto-generated catch block  
            e1.printStackTrace();  
        }
    }

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM