Ich versuche, eine Reihe von Dateien von verschiedenen Orten in einen Zip-Ordner mit Zip4J zu zippen. Ich habe eine ArrayList von Dateien aus verschiedenen Ordnern, und während ich die Liste durchlaufe, die "zip.AddFile (Datei, Parameter)" aufruft, werden die Dateien gut hinzugefügt, bis der Ordner, aus dem die Dateien stammen, wechselt. Und ich bekomme die folgende Fehlermeldung,Zip4J, Nullzeiger Ausnahme durch externen Dateistream verursacht?
net.lingala.zip4j.exception.ZipException: java.lang.NullPointerException
at net.lingala.zip4j.zip.ZipEngine.initAddFiles(ZipEngine.java:187)
at net.lingala.zip4j.zip.ZipEngine.addFiles(ZipEngine.java:85)
at net.lingala.zip4j.core.ZipFile.addFiles(ZipFile.java:292)
at net.lingala.zip4j.core.ZipFile.addFile(ZipFile.java:250)
at tasks.OutputTask.compressFiles(OutputTask.java:627)
at tasks.OutputTask.uploadHelper(OutputTask.java:550)
at tasks.OutputTask.uploadHelper(OutputTask.java:593)
at tasks.OutputTask.uploadHelper(OutputTask.java:593)
at tasks.OutputTask.uploadHelper(OutputTask.java:593)
at tasks.OutputTask.uploadHelper(OutputTask.java:593)
at tasks.OutputTask.upload(OutputTask.java:516)
at tasks.OutputTask.call(OutputTask.java:279)
at tasks.OutputTask.call(OutputTask.java:1)
at javafx.concurrent.Task$TaskCallable.call(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NullPointerException
at net.lingala.zip4j.zip.ZipEngine.prepareFileOutputStream(ZipEngine.java:433)
at net.lingala.zip4j.zip.ZipEngine.removeFilesIfExists(ZipEngine.java:385)
at net.lingala.zip4j.zip.ZipEngine.initAddFiles(ZipEngine.java:109)
... 17 more
Der Code selbst ist
ZipFile zip;
try {
System.out.println("Creating zip: " + outputName);
File zipfile;
if ((zipfile = new File(outputName)).exists()) {
zipfile.delete();
}
zip = new ZipFile(new File(outputName));
ZipParameters params = new ZipParameters();
if (encrypt) {
params.setEncryptFiles(true);
params.setEncryptionMethod(Zip4jConstants.ENC_METHOD_AES);
params.setAesKeyStrength(Zip4jConstants.AES_STRENGTH_256);
params.setPassword(Property.AES_ENCRYPTION_KEY.getValue());
}
params.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
params.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);
for (File file : sourceFiles) {
if (file.isFile()) {
try {
zip.addFile(file, params);
} catch (ZipException e) {
e.printStackTrace();
}
}
}
So zum Beispiel, hier ist die Liste der Dateien
files = {C:/Folder1/img1, C/Folder1/txtFile, C:/Folder1/jar, C:/Folder2/img2}
Der Code wird ordnungsgemäß ausgeführt, bis es das "C:/Folder2/img2" trifft, wo es den obigen Fehler zurückgibt. Ich habe versucht
, die einen anderen Fehler bietet, sagen, dass es keinen Namen für die externe Quelldatei gibt. Jede Hilfe würde sehr geschätzt werden. Vielen Dank im Voraus