第一部分 - 多线程复制文件
这个版本是因为看错了要求,把任务要求看成了“多线程复制一个文件”,写完才发现不对,但是代码还是没问题的,把它放上来。
线程类
package com.xxm.advanced_camp.greatmission3_readbigfiles;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
/**
* 用于多线程复制文件的线程类
* 用途:复制文件到另一个位置,
* <p>
* fileIn 输入文件
* <p>
* fileOut 输出文件
* <p>
* posStart 该线程复制的起始位置
* <p>
* posEnd 该线程复制的终点位置
*/
class CopyThread extends Thread {
File fileIn = null;
File fileOut = null;
long posStart = 0;
long posEnd = 0;
//定义带参数的构造方法
public CopyThread(File fileIn, File fileOut, long posStart, long posEnd) {
this.fileIn = fileIn;
this.fileOut = fileOut;
this.posStart = posStart;
this.posEnd = posEnd;
}
//覆写 run 方法
@Override
public void run() {
//1.初始化读写的 RandomAccessFile 对象
RandomAccessFile rafWrite = null;
RandomAccessFile rafRead = null;
//2.给对象复制,传入读取、写入的位置
try {
rafRead = new RandomAccessFile(fileIn, "r");
rafWrite = new RandomAccessFile(fileOut, "rw");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
//3.定义用来存储读写数据的字节数组
byte[] b = new byte[1024 * 3];
//临时变量 len
int len = 0;
//4.利用 RandomAccessFile 类的 seek 方法获取线程复制文件的起始点
try {
rafWrite.seek(posStart);
rafRead.seek(posStart);
//5.死循环,len 不等于-1 时,代表文件未到达末尾,继续执行;等于-1时退出。
while ((len = rafRead.read(b)) != -1)

本文分别介绍如何使用Java实现多线程复制文件和多线程读取并打印文件内容。第一部分详细讲解了多线程文件复制的实现,包括线程类和复制类的设计。第二部分则阐述了多线程读取文件并打印的实现,同样提供了线程类和打印类的代码结构。
最低0.47元/天 解锁文章

1039

被折叠的 条评论
为什么被折叠?



