java 分卷压缩_java 分卷 zip

最近想写个东西,要使用分卷压缩,但是不想使用别的开源包,自己写了一个类来实现,其实使用

public void zip(String path) throws IOException {

File file = new File(path);

BufferedInputStream origin = null;

byte data[] = new byte[BUFFER];

FileInputStream fi = new FileInputStream(file);

origin = new BufferedInputStream(fi, BUFFER);

int count;

int offset = 0;

ZipOutputStream out = null;

while (true) {

if ((count = origin.read(data, 0, BUFFER)) != -1) {

if (offset % (MEGA) == 0) {

FileOutputStream dest = new FileOutputStream(file.getName()

+ ".(part" + (offset / (MEGA) + 1) + ").zip");

out = new ZipOutputStream(new BufferedOutputStream(dest));

ZipEntry entry = new ZipEntry(file.getName());

out.putNextEntry(entry);

}

out.write(data, 0, count);

offset += 1024;

if (offset % (MEGA) == 0 && offset != 0) {

out.close();

}

} else {

out.close();

break;

}

}

origin.close();

}

public void unzip(String[] path) throws IOException {

File file = new File(path[0].split("\\.")[0] + "."

+ path[0].split("\\.")[1]);

BufferedOutputStream out = new BufferedOutputStream(

new FileOutputStream(file));

byte data[] = new byte[BUFFER];

int offset = 0;

for (int i = 0; i < path.length; i++) {

ZipInputStream unzipfile = new ZipInputStream(new FileInputStream(

path[0]));

BufferedInputStream in = new BufferedInputStream(unzipfile);

ZipEntry entry = unzipfile.getNextEntry();

int count = 0;

while ((count = in.read(data, 0, BUFFER)) != -1) {

out.write(data, 0, count);

}

in.close();

}

out.close();

}

这里不要忘记了,压缩和解压都要使用entry来获得该文件的入口ZipEntry提供了一个功能很广泛的接口,允许我们获取设置zip文件内该特定项上的可利用的数据:名字压缩和未压缩的文件大小,日期校验和等

Java中可以使用ZipOutputStream类来实现分卷压缩ZipOutputStream类是一个输出流,可以用来写入ZIP文件格式的数据。以下是一个示例代码,可以实现将大文件分卷压缩: ```java import java.io.*; import java.util.zip.*; public class ZipSplitter { public static void main(String[] args) throws Exception { String inputFileName = "input.txt"; String outputFileName = "output.zip"; int maxFileSize = 1024 * 1024; // 1MB // Open input stream FileInputStream inputStream = new FileInputStream(inputFileName); BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream); // Open output stream FileOutputStream outputStream = new FileOutputStream(outputFileName); BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(outputStream); ZipOutputStream zipOutputStream = new ZipOutputStream(bufferedOutputStream); zipOutputStream.setMethod(ZipOutputStream.DEFLATED); // Split file into multiple parts byte[] buffer = new byte[maxFileSize]; int partCount = 1; while (true) { // Read up to maxFileSize bytes from input stream int bytesRead = bufferedInputStream.read(buffer, 0, maxFileSize); if (bytesRead == -1) { break; } // Write part to output stream String partName = String.format("%s.%03d", inputFileName, partCount); ZipEntry zipEntry = new ZipEntry(partName); zipOutputStream.putNextEntry(zipEntry); zipOutputStream.write(buffer, 0, bytesRead); zipOutputStream.closeEntry(); // Increment part count partCount++; } // Close streams bufferedInputStream.close(); zipOutputStream.close(); } } ``` 以上代码将会把文件 `input.txt` 分成多个部分,每个部分大小为 1MB,然后将这些部分保存在一个名为 `output.zip` 的文件中。每个部分的文件名格式为 `input.txt.001`、`input.txt.002` 等等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值