Java 批量下载文件并压缩
在开发过程中,经常会遇到需要批量下载文件并压缩的情况。比如要从服务器上下载多个文件,然后将这些文件打包成一个压缩文件,方便用户一次性下载。本文将介绍如何使用 Java 实现这个功能。
下载文件
要实现文件下载功能,我们可以使用 Java 的 java.net.URL
类来创建一个 URL 对象,然后通过该对象的 openStream
方法获取文件的输入流,最后使用 java.nio.file.Files
类的 copy
方法将文件流写入本地文件。
下面是一个示例代码,演示如何下载一个文件:
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
public class FileDownloader {
public static void downloadFile(String fileUrl, String destination) throws IOException {
URL url = new URL(fileUrl);
try (InputStream in = url.openStream();
FileOutputStream out = new FileOutputStream(destination)) {
Files.copy(in, Path.of(destination), StandardCopyOption.REPLACE_EXISTING);
}
}
public static void main(String[] args) {
String fileUrl = "
String destination = "downloaded_file.txt";
try {
downloadFile(fileUrl, destination);
System.out.println("File downloaded successfully.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
在这个示例中,我们使用 java.net.URL
类创建了一个 URL 对象,然后通过 openStream
方法获取了文件的输入流。接下来,我们创建了一个 FileOutputStream
对象,用于将文件写入本地磁盘。最后,我们使用 java.nio.file.Files
类的 copy
方法将文件流写入本地文件。
批量下载文件
如果要批量下载文件,我们可以将下载文件的 URL 存储在一个列表中,然后遍历列表,逐个下载文件。
下面是一个示例代码,演示如何批量下载文件:
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
import java.util.ArrayList;
import java.util.List;
public class BatchFileDownloader {
public static void downloadFiles(List<String> fileUrls, String destination) throws IOException {
for (String fileUrl : fileUrls) {
URL url = new URL(fileUrl);
String fileName = getFileNameFromUrl(fileUrl);
String filePath = destination + "/" + fileName;
try (InputStream in = url.openStream();
FileOutputStream out = new FileOutputStream(filePath)) {
Files.copy(in, Path.of(filePath), StandardCopyOption.REPLACE_EXISTING);
}
}
}
private static String getFileNameFromUrl(String fileUrl) {
return fileUrl.substring(fileUrl.lastIndexOf("/") + 1);
}
public static void main(String[] args) {
List<String> fileUrls = new ArrayList<>();
fileUrls.add("
fileUrls.add("
fileUrls.add("
String destination = "downloads";
try {
downloadFiles(fileUrls, destination);
System.out.println("Files downloaded successfully.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
在这个示例中,我们创建了一个 downloadFiles
方法,接受一个文件 URL 列表和一个目标文件夹作为参数。在方法内部,我们使用循环遍历文件 URL 列表,逐个下载文件。
压缩文件
要将多个文件打包成一个压缩文件,我们可以使用 Java 的 java.util.zip.ZipOutputStream
类。这个类可以将文件写入 ZIP 文件,并进行压缩。
下面是一个示例代码,演示如何将多个文件打包成一个压缩文件:
import java.io.*;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class FileCompressor {
public static void compressFiles(List<String> filePaths, String destination) throws IOException {
try (ZipOutputStream out = new ZipOutputStream(new FileOutputStream(destination))) {
for (String filePath : filePaths) {
File file = new File(filePath);
FileInputStream in = new FileInputStream(file);
out.putNextEntry(new ZipEntry(file.getName()));
byte[] buffer = new byte[1024];
int length;
while ((length = in.read(buffer)) > 0) {
out.write(buffer, 0, length);