java中如何对特大文件做断点续传RandomAccessFile
Java 中可以使用 RandomAccessFile 类来实现特大文件的断点续传功能。
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.net.URL;
import java.net.HttpURLConnection;
public class ResumeDownloadExample {
public static void main(String[] args) {
String fileURL = "http://example.com/largefile.zip";
String saveDir = "C:/downloads/";
String fileName = "largefile.zip";
// 初始化下载路径和保存目录
File dir = new File(saveDir);
if (!dir.exists()) {
dir.mkdirs();
}
try {
URL url = new URL(fileURL);
HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
// 尝试获取文件的大小
long fileSize = getFileSize(httpConn);
System.out.println("Total file size: " + fileSize + " bytes");
// 创建一个随机访问文件对象
RandomAccessFile file = new RandomAccessFile(new File(saveDir + fileName), "rw");
// 检查本地文件是否存在
long localFileSize = file.length();
if (localFileSize >= fileSize) {
System.out.println("File already downloaded.");
return;
}
// 设置下载的起始位置
httpConn.setRequestProperty("Range", "bytes=" + localFileSize + "-");
// 获取输入流以读取数据
httpConn.connect();
byte[] buffer = new byte[1024];
int bytesRead = -1;
// 循环读取数据,并将其写入文件
while ((bytesRead = httpConn.getInputStream().read(buffer)) != -1) {
file.write(buffer, 0, bytesRead);
}
System.out.println("File downloaded successfully.");
// 关闭文件和连接
file.close();
httpConn.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
// 获取文件大小的方法
private static long getFileSize(HttpURLConnection httpConn) {
long fileSize = -1;
String contentLength = httpConn.getHeaderField("Content-Length");
if (contentLength != null) {
fileSize = Long.parseLong(contentLength);
}
return fileSize;
}
}
代码会根据指定的文件 URL,将文件下载到指定的保存目录中。当程序再次运行时,它会检查本地文件的大小,如果已经完成了下载,则不会重新下载。
注意,这只是一个基本示例,并未处理网络异常、文件重命名等边缘情况。在实际使用中可能还需要添加一些错误处理和完善断点续传的逻辑。
参考文章:http://blog.ncmem.com/wordpress/2023/10/07/java%e4%b8%ad%e5%a6%82%e4%bd%95%e5%af%b9%e7%89%b9%e5%a4%a7%e6%96%87%e4%bb%b6%e5%81%9a%e6%96%ad%e7%82%b9%e7%bb%ad%e4%bc%a0randomaccessfile/
欢迎入群一起讨论
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)