要求:使用多线程复制一个文件(使用多线程复制一个文件可以加快文件的复制速度)

代码:

package 多线程复制文件;import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;public class Test {public static void main(String[] args) {//这里我们使用4个线程同时复制一个文件---复制一个视频// 先获取文件的长度 length()File file = new File("D:\\线程.wmv");long l = file.length();//平均每段长度:长度/4 int avgLength = (int)l/4;// 创建四个线程对象  传递 起始  和终止位置//注意:最后一段的结束位置:因为--长度/4--不一定能不除尽,可能有余数,所以必须在最后一节将剩余的都算上来MyThead thead = new MyThead(0, avgLength-1);MyThead thead2 = new MyThead(avgLength, 2*avgLength-1);MyThead thead3 = new MyThead(avgLength*2, 3*avgLength-1);MyThead thead4 = new MyThead(3*avgLength, (int)file.length()-1);// 启动线程thead.start();thead2.start();thead3.start();thead4.start();}
}//子线程
class MyThead extends Thread{int start;int end;public MyThead(int start,int end) {this.start = start;this.end = end;}@Overridepublic void run() {System.out.println(Thread.currentThread().getName()+"启动了");// 根据位置赋值文件                             RandomAccessFile read =  null;RandomAccessFile write = null;try {read = new RandomAccessFile(new File("D:\\线程.wmv"), "rw");write = new RandomAccessFile(new File("D:\\线程2.wmv"), "rw");// 2 设置读写位置read.seek(start);write.seek(start);// 指定位置开始读写// 读过的长度与要读的长度相等 则此段落复制完毕int length = end-start+1;// 每个线程要读的长度int readLength = 0;// 已经读了的长度byte[] bs = new byte[1024];while(true){//因为每段要复制的长度不一定恰好是1024的整数倍,够1024时,直接读写即可;不满1024时,有多少就读多少//因此这里需要将剩余文件长度与1024进行比较// 判断剩余字节个数是否小于1024---1024为byte数组中定义的长短 // 如果不小  正常读取1024     4097// 如果小于  只读 剩余的  总长度-读取了的长度if(length-readLength<1024){read.read(bs, 0, length-readLength);// 不够1024的时候单独读一次write.write(bs, 0, length-readLength);break;}else{// 剩余需要读的内容 大于等于1024read.read(bs);write.write(bs, 0, 1024);readLength+=1024;}}System.out.println(Thread.currentThread().getName()+"复制完毕");} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{if(read!=null){try {read.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if(write!=null){try {write.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}
}

综合应用题:多线程复制文件(知识点:多线程、随机读写流)相关推荐

  1. Java IO流之普通文件流和随机读写流区别

    普通文件流和随机读写流区别 普通文件流:http://blog.csdn.net/baidu_37107022/article/details/71056011 FileInputStream和Fil ...

  2. Java IO流之随机读写流RandomAccessFile

    随机读写流RandomAccessFile 简介 此类的实例支持对随机访问文件的**读取和写入**.随机访问文件的行为类似存储在文件系统中的一个大型 byte 数组.存在指向该隐含数组的光标或索引,称 ...

  3. 文件操作(文件指针+顺序/随机读写)

    目录 一.文件 1.以文件功能分类: 2.文件名 二.文件指针 三.文件的打开和关闭 1.fopen fclose 2."r" - 读 3."w" - 写 四. ...

  4. java多线程读取文件_java多线程读写同一个文件

    本文提供java多线程分别定时读写同一个文件的样例,其中两个线程,一个每分钟写入当前时间到指定文件,另一个线程读出每分钟新写的内容. 使用简单的Thread.sleep技术实现定时 package t ...

  5. 综合应用题:python文件(论语)

    十二星座日期范围之一 fo = open("PY301-SunSign.csv","r",encoding='utf-8') ls = [] for line ...

  6. RandomAccessFile并发复制文件

    RandomAccessFile概述 下面是引自jdk1.6的api中对这个类的描述: 此类的实例支持对随机访问文件的读取和写入.随机访问文件的行为类似存储在文件系统中的一个大型 byte 数组.存在 ...

  7. c语言复制文件夹xcopy,XCOPY——目录复制命令

    Xcopy 复制文件和目录,包括子目录. 语法 xcopySource [Destination] [/w] [/p] [/c] [/v] [/q] [/f] [/l] [/g] [/d[:MM-DD ...

  8. java随机访问流_java 随机读写访问流及seek方法

    package stream; import java.io.File; import java.io.FileNotFoundException; import java.io.IOExceptio ...

  9. c语言中用来指示文件缓冲区中具体读写位置,C语言文件读写操作中缓冲区问题和setbuf函数详解...

    清除和设置文件缓冲区 (1).清除文件缓冲区函数: int fflush(FILE *stream); int flushall(); fflush()函数将清除由stream指向的文件缓冲区里的内容 ...

最新文章

  1. Javascript Patterns--读书笔记8 (Factory)
  2. 【CV】基于python和OpenCV构建智能停车系统
  3. BZOJ 1305 二分+网络流
  4. C++ STL 乱序算法
  5. C#算法设计排序篇之01-冒泡排序(附带动画演示程序)
  6. 北京证券交易所首批三大基本业务规则开始征求意见
  7. MySQL 全文搜索支持
  8. SAP License:SAP All-in-One产品特点
  9. aix显示服务器ip,AIX系统查看和设置网关和IP配置
  10. Linux系统检测工具sysstat使用实战
  11. 【Web_UI自动化_Python3_大众点评霸王餐_Seleniumpprint】(美团)大众点评霸王餐免费抽取,网址爬虫+自动报名,自动化测试案例
  12. 三星S5P6818之UBOOT网络配置
  13. 安装驱动显卡重启计算机,win10系统电脑安装显卡驱动后一直重启的解决方案
  14. 中国互联网公司员工平均年龄出炉:平均年龄 27 到 33 岁
  15. 服务器虚拟化实验报告,服务器虚拟化Hyper-v 3.0实训培训
  16. node.js-day04
  17. 【2021年度总结】回忆过去,大专生的三年
  18. oracle 裸金属,通过裸金属服务部署Oracle RAC (五)Oracle RAC的备份
  19. 代码BUG之曲线救国
  20. C++算法练习题 T1(henu.hjy)

热门文章

  1. 深入理解python特性_深入理解Python特性(7)
  2. C++ Primer 5th笔记(chap 15 OOP)虚函数
  3. C++ Primer 5th笔记(chap 13 拷贝控制) 实例1测试和结果分析
  4. Linux Kernel aarch64的ARM-CE aes-ecb的底层代码导读
  5. [pasecactf_2019]tornado_casino
  6. Win10 KMD驱动模板,应用层向内核传一个字符串,内核把它转成大写
  7. SEH反调试(SetUnhandledExceptionFilter)
  8. angr学习笔记(2)
  9. 2020-12-6(从反汇编理解指针和引用的区别)
  10. 2020-11-13(调用约定)