Java开发
Jsoup的使用教程(7)-大文件内容获取问题
2025-01-22 36 0
简介 Jsoup的使用教程----大文件内容获取问题
在采集数据时,经常会遇到一些较大的文件,如包含大量文本信息的 HTML 文件、 大小超过 10M 的图片、PDF 和 ZIP 等文件。在默认情况下,Jsoup 最大只能获取 1M的文件。因此,直接使用 Jsoup 请求包含大量文本信息的 HTML 文件,将导致获取的 内容不全;请求下载大小超过 1M 的图片和 ZIP 等文件,将导致文件无法查看或解压。
但在 Jsoup 中,可以使用 maxBodySize(int bytes)设置请求文件大小限制,来避免这种 问题的出现。另外,在请求大文件时,设置的超时 时间也需尽量长些。
public class JsoupConnectBodySize1 {
public static void main(String[] args) throws IOException {
String url = "https://www-us.******.org/dist//httpd/httpd-2.4.37.tar.gz";
//超时时间设置长一些,下载大文件
Connection.Response response = Jsoup.connect(url)
.timeout(10*60*1000)
.maxBodySize(Integer.MAX_VALUE)
.method(Connection.Method.GET)
.ignoreContentType(true)
.execute();
//如果响应成功,则执行下面的操作
if (response.statusCode() == 200) {
//响应转化成输出流
BufferedInputStream bufferedInputStream = response.bodyStream();
//保存图片
saveFile(bufferedInputStream,"image/httpd-2.4.37.tar.gz");
}
}
static void saveFile(BufferedInputStream inputStream, String savePath) throws IOException {
//一次最多读取1KB
byte[] buffer = new byte[1024];
int len = 0;
//创建缓冲流
FileOutputStream fileOutStream = new FileOutputStream(new File(savePath));
BufferedOutputStream bufferedOut = new BufferedOutputStream(fileOutStream);
//文件写入
while ((len = inputStream.read(buffer, 0, 1024)) != -1) {
bufferedOut.write(buffer, 0, len);
}
//缓冲流释放与关闭
bufferedOut.flush(); bufferedOut.close();
}
}