综合应用题:多线程复制文件(知识点:多线程、随机读写流)
要求:使用多线程复制一个文件(使用多线程复制一个文件可以加快文件的复制速度)
代码:
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();}}}}
}
综合应用题:多线程复制文件(知识点:多线程、随机读写流)相关推荐
- Java IO流之普通文件流和随机读写流区别
普通文件流和随机读写流区别 普通文件流:http://blog.csdn.net/baidu_37107022/article/details/71056011 FileInputStream和Fil ...
- Java IO流之随机读写流RandomAccessFile
随机读写流RandomAccessFile 简介 此类的实例支持对随机访问文件的**读取和写入**.随机访问文件的行为类似存储在文件系统中的一个大型 byte 数组.存在指向该隐含数组的光标或索引,称 ...
- 文件操作(文件指针+顺序/随机读写)
目录 一.文件 1.以文件功能分类: 2.文件名 二.文件指针 三.文件的打开和关闭 1.fopen fclose 2."r" - 读 3."w" - 写 四. ...
- java多线程读取文件_java多线程读写同一个文件
本文提供java多线程分别定时读写同一个文件的样例,其中两个线程,一个每分钟写入当前时间到指定文件,另一个线程读出每分钟新写的内容. 使用简单的Thread.sleep技术实现定时 package t ...
- 综合应用题:python文件(论语)
十二星座日期范围之一 fo = open("PY301-SunSign.csv","r",encoding='utf-8') ls = [] for line ...
- RandomAccessFile并发复制文件
RandomAccessFile概述 下面是引自jdk1.6的api中对这个类的描述: 此类的实例支持对随机访问文件的读取和写入.随机访问文件的行为类似存储在文件系统中的一个大型 byte 数组.存在 ...
- c语言复制文件夹xcopy,XCOPY——目录复制命令
Xcopy 复制文件和目录,包括子目录. 语法 xcopySource [Destination] [/w] [/p] [/c] [/v] [/q] [/f] [/l] [/g] [/d[:MM-DD ...
- java随机访问流_java 随机读写访问流及seek方法
package stream; import java.io.File; import java.io.FileNotFoundException; import java.io.IOExceptio ...
- c语言中用来指示文件缓冲区中具体读写位置,C语言文件读写操作中缓冲区问题和setbuf函数详解...
清除和设置文件缓冲区 (1).清除文件缓冲区函数: int fflush(FILE *stream); int flushall(); fflush()函数将清除由stream指向的文件缓冲区里的内容 ...
最新文章
- Javascript Patterns--读书笔记8 (Factory)
- 【CV】基于python和OpenCV构建智能停车系统
- BZOJ 1305 二分+网络流
- C++ STL 乱序算法
- C#算法设计排序篇之01-冒泡排序(附带动画演示程序)
- 北京证券交易所首批三大基本业务规则开始征求意见
- MySQL 全文搜索支持
- SAP License:SAP All-in-One产品特点
- aix显示服务器ip,AIX系统查看和设置网关和IP配置
- Linux系统检测工具sysstat使用实战
- 【Web_UI自动化_Python3_大众点评霸王餐_Seleniumpprint】(美团)大众点评霸王餐免费抽取,网址爬虫+自动报名,自动化测试案例
- 三星S5P6818之UBOOT网络配置
- 安装驱动显卡重启计算机,win10系统电脑安装显卡驱动后一直重启的解决方案
- 中国互联网公司员工平均年龄出炉:平均年龄 27 到 33 岁
- 服务器虚拟化实验报告,服务器虚拟化Hyper-v 3.0实训培训
- node.js-day04
- 【2021年度总结】回忆过去,大专生的三年
- oracle 裸金属,通过裸金属服务部署Oracle RAC (五)Oracle RAC的备份
- 代码BUG之曲线救国
- C++算法练习题 T1(henu.hjy)
热门文章
- 深入理解python特性_深入理解Python特性(7)
- C++ Primer 5th笔记(chap 15 OOP)虚函数
- C++ Primer 5th笔记(chap 13 拷贝控制) 实例1测试和结果分析
- Linux Kernel aarch64的ARM-CE aes-ecb的底层代码导读
- [pasecactf_2019]tornado_casino
- Win10 KMD驱动模板,应用层向内核传一个字符串,内核把它转成大写
- SEH反调试(SetUnhandledExceptionFilter)
- angr学习笔记(2)
- 2020-12-6(从反汇编理解指针和引用的区别)
- 2020-11-13(调用约定)