ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

IO 单个文件的多线程拷贝

2019-03-13 23:38:16  阅读:184  来源: 互联网

标签:java IO int io new import 拷贝 多线程 startPos


package FileCopyThread;                         //自建的包,根据个人调整

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

public class FileCopy {
    public static void main(String[] args) {
        
        int start = (int)System.currentTimeMillis();
        try {
            RandomAccessFile raf = new RandomAccessFile(new File("E:/11.txt"), "r");
            int fileLen = (int)raf.length();
            int nums = 20;
            int distance = (int)(fileLen/nums);
            
            new ThreadFileCopy(0, distance - 1).start();;
            for(int i = 1; i <= nums - 2; i++){
                new ThreadFileCopy(distance*i, distance*(i+1) - 1).start();
            }
            new ThreadFileCopy(distance*(nums-1), fileLen).start();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        int end = (int)System.currentTimeMillis();
        System.out.println("耗时:" + (end - start));
        
    }
}
package FileCopyThread;                         //自建的包根据个人调整

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

public class ThreadFileCopy extends Thread{
    final String oldPath = "E:/11.txt";
    final String newPath = "F:/22.txt";
    
    RandomAccessFile oraf = null;
    RandomAccessFile nraf = null;
    
    private int startPos = 0;
    private int endPos = 0;
    final int bufSize = 10240 * 5;
    public ThreadFileCopy(){
        
    }
    
    public ThreadFileCopy(int startPos, int endPos){
        this.startPos = startPos;
        this.endPos = endPos;
    }
    
    @Override
    public void run() {
        
        try {
            oraf = new RandomAccessFile(new File(oldPath), "r");
            nraf = new RandomAccessFile(new File(newPath), "rw");
            
            oraf.seek(startPos);
            nraf.seek(startPos);
            
            byte[] bytes = new byte[bufSize];
            int len;
            while(endPos - startPos > 0){
                len = (int)((endPos - startPos) > bufSize ? bufSize :(endPos - startPos));
                oraf.read(bytes, 0, len);
                nraf.write(bytes, 0, len);
                endPos -= len;
                System.out.println(Thread.currentThread().getName() 
                        + "读取了" + len + "个字节");
            }
            
            
            
            oraf.close();
            nraf.close();
            
            
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            
        }
    }
}

 

标签:java,IO,int,io,new,import,拷贝,多线程,startPos
来源: https://www.cnblogs.com/854594834-YT/p/10527481.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有