他们谈论将zip文件视为文件系统,并通过这种方式提供了递归压缩文件和文件夹的密钥,如您在链接中提到的示例中所看到的,将被视为文件系统,可以使用java.nio进行访问(甚至我都不知道!)。
此外,您可以像通常那样使用File.copy来将任何文件复制进文件系统或从文件系统中移出,但是可以通过编程方式进行。
注意:如果时间允许,我将创建一个与我们相同的示例程序,并将其发布在此处,直到那时,您绝对可以看看这种方法。
方法#1-未使用,因为它使用了外部库
请查看下面的以下仓库,如果您可以在项目中使用外部库,可以处理很多情况(因为您没有在问题中提到要局限于使用香草java)仅),那么这应该对您有所帮助。
他们还以您在问题中提到的10MB为例。
zipFile.createSplitZipFile(filesToAdd, zipParameters, true, 10485760); // using 10MB in this example
you can also get it from maven
net.lingala.zip4j
zip4j
2.2.4
Here, is an example and the output, 1.dat is 109mb file
-rw-r--r-- 1 apachemain staff 109M Nov 15 18:00 1.dat
package org.example;
import net.lingala.zip4j.ZipFile;
import net.lingala.zip4j.exception.ZipException;
import net.lingala.zip4j.model.ZipParameters;
import net.lingala.zip4j.model.enums.CompressionMethod;
import net.lingala.zip4j.model.enums.EncryptionMethod;
import java.io.File;
import java.util.Arrays;
import java.util.List;
public class CreateSplitZipFile {
public CreateSplitZipFile() {
try {
// Initiate ZipFile object with the path/name of the zip file.
// Build the list of files to be added in the array list
// Objects of type File have to be added to the ArrayList
ZipParameters zipParameters = new ZipParameters();
zipParameters.setEncryptFiles(true);
zipParameters.setEncryptionMethod(EncryptionMethod.AES);
zipParameters.setCompressionMethod(CompressionMethod.STORE);
List filesToAdd = Arrays.asList(
new File("1.dat")
);
ZipFile zipFile = new ZipFile("filename.zip", "password".toCharArray());
zipFile.createSplitZipFile(filesToAdd, zipParameters, true, 10485760); // using 10MB in this example
} catch (ZipException e) {
e.printStackTrace();
}
}
/**
* @param args
*/
public static void main(String[] args) {
new CreateSplitZipFile();
}
}
OUTPUT
=======
-rw-r--r-- 1 apachemain staff 10M Nov 16 10:26 filename.z01
-rw-r--r-- 1 apachemain staff 10M Nov 16 10:26 filename.z02
-rw-r--r-- 1 apachemain staff 10M Nov 16 10:26 filename.z03
-rw-r--r-- 1 apachemain staff 10M Nov 16 10:26 filename.z04
-rw-r--r-- 1 apachemain staff 10M Nov 16 10:26 filename.z05
-rw-r--r-- 1 apachemain staff 10M Nov 16 10:26 filename.z06
-rw-r--r-- 1 apachemain staff 10M Nov 16 10:26 filename.z07
-rw-r--r-- 1 apachemain staff 10M Nov 16 10:26 filename.z08
-rw-r--r-- 1 apachemain staff 10M Nov 16 10:26 filename.z09
-rw-r--r-- 1 apachemain staff 10M Nov 16 10:26 filename.z10
-rw-r--r-- 1 apachemain staff 8.6M Nov 16 10:26 filename.zip
am also seeing the following exception after the creation of the zip files.
net.lingala.zip4j.exception.ZipException: java.io.FileNotFoundException: null/filename.z01 (No such file or directory)
at net.lingala.zip4j.tasks.AsyncZipTask.performTaskWithErrorHandling(AsyncZipTask.java:49)
at net.lingala.zip4j.tasks.AsyncZipTask.execute(AsyncZipTask.java:36)
at net.lingala.zip4j.ZipFile.createSplitZipFile(ZipFile.java:152)
at org.example.CreateSplitZipFile.(CreateSplitZipFile.java:32)
at org.example.CreateSplitZipFile.main(CreateSplitZipFile.java:44)
Caused by: java.io.FileNotFoundException: null/filename.z01 (No such file or directory)