以百度网盘为例,上传单一压缩包大小不能超过2GB,而我们的.mp4格式的学习视频每一个都有1GB左右,不能直接将整个500GB的文件夹压缩上传,只能一个视频一个视频地压缩。我们不可能手动一个一个压缩这几百个视频,故使用Java压缩流,遍历文件夹,压缩每个.mp4文件,代码如下
import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class MyZip {
public static void main(String[] args) {
// 遍历文件夹
File folder = new File("D:\\卡尔\\Videos\\1\\animation");
File[] files = folder.listFiles();
for (int i = 0; i < files.length; i++) {
if (files[i].isFile()) {
// 压缩文件
try {
compressFile(files[i],i+1);
System.out.println("File compressed successfully: " + files[i].getName());
} catch (IOException e) {
System.err.println("Error compressing file: " + e.getMessage());
}
}
}
}
public static void compressFile(File file,int num) throws IOException {
try (
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(num + ".zip")))
) {
// 创建一个ZipEntry,并添加到zip文件中
ZipEntry zipEntry = new ZipEntry(file.getName());
zos.putNextEntry(zipEntry);
// 从源文件中读取数据并写入zip文件
byte[] buffer = new byte[4*1024*1024];
int bytesRead;
while ((bytesRead = bis.read(buffer)) != -1) {
zos.write(buffer, 0, bytesRead);
}
// 完成当前条目的写入
zos.closeEntry();
// 注意:在这个简单的例子中,我们只添加了一个文件到ZIP中。
// 如果你想要添加多个文件,你需要在循环中重复上述步骤(创建ZipEntry、putNextEntry、读取和写入、closeEntry)。
} catch (IOException e) {
e.printStackTrace();
}
}
}
如图,我们成功将学习资料压缩成zip,保存在java工程目录中