import java.io.*;
import java.util.UUID;
public class ResumableFileTransfer {
private static final String UPLOAD_DIRECTORY = "/path/to/upload/directory/";
public static void main(String[] args) {
String fileName = "example.txt";
String fileId = UUID.randomUUID().toString();
// 上传文件,包含断点续传逻辑
uploadFile(fileName, fileId);
// 下载文件,模拟继续传输
downloadFile(fileName, fileId);
}
private static void uploadFile(String fileName, String fileId) {
try (FileInputStream fis = new FileInputStream(fileName)) {
String resumeFilePath = UPLOAD_DIRECTORY + fileId + ".resume";
long uploadedBytes = 0;
// 如果存在断点记录文件,则读取已上传的字节数
File resumeFile = new File(resumeFilePath);
if (resumeFile.exists()) {
try (BufferedReader reader = new BufferedReader(new FileReader(resumeFile))) {
uploadedBytes = Long.parseLong(reader.readLine());
}
}
// 设置输入流的起始位置
fis.skip(uploadedBytes);
// 设置输出流,追加写入文件
try (FileOutputStream fos = new FileOutputStream(UPLOAD_DIRECTORY + fileId + ".part", true)) {
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = fis.read(buffer)) != -1) {
fos.write(buffer, 0, bytesRead);
uploadedBytes += bytesRead;
// 在断点记录文件中保存已上传的字节数
try (BufferedWriter writer = new BufferedWriter(new FileWriter(resumeFile))) {
writer.write(Long.toString(uploadedBytes));
}
// 模拟中断
if (uploadedBytes >= 5000) {
System.out.println("Transfer interrupted. Breakpoint saved.");
return;
}
}
System.out.println("File uploaded successfully.");
}
} catch (IOException e) {
e.printStackTrace();
}
}
private static void downloadFile(String fileName, String fileId) {
try (FileInputStream fis = new FileInputStream(UPLOAD_DIRECTORY + fileId + ".part")) {
// 假设有一个目标文件用于接收下载的内容
try (FileOutputStream fos = new FileOutputStream("downloaded_" + fileName)) {
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = fis.read(buffer)) != -1) {
fos.write(buffer, 0, bytesRead);
}
System.out.println("File downloaded successfully.");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}