Skip to content

Commit 7a74670

Browse files
#473 set lastModifiedFileTime for all entries and not just directories
1 parent 0ffcaec commit 7a74670

File tree

2 files changed

+40
-12
lines changed

2 files changed

+40
-12
lines changed

src/main/java/net/lingala/zip4j/io/outputstream/ZipOutputStream.java

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -78,18 +78,7 @@ public ZipOutputStream(OutputStream outputStream, char[] password, Zip4jConfig z
7878

7979
public void putNextEntry(ZipParameters zipParameters) throws IOException {
8080
verifyZipParameters(zipParameters);
81-
82-
ZipParameters clonedZipParameters = new ZipParameters(zipParameters);
83-
if (isZipEntryDirectory(zipParameters.getFileNameInZip())) {
84-
clonedZipParameters.setWriteExtendedLocalFileHeader(false);
85-
clonedZipParameters.setCompressionMethod(CompressionMethod.STORE);
86-
clonedZipParameters.setEncryptFiles(false);
87-
clonedZipParameters.setEntrySize(0);
88-
89-
if (zipParameters.getLastModifiedFileTime() <= 0) {
90-
clonedZipParameters.setLastModifiedFileTime(System.currentTimeMillis());
91-
}
92-
}
81+
ZipParameters clonedZipParameters = cloneAndPrepareZipParameters(zipParameters);
9382
initializeAndWriteFileHeader(clonedZipParameters);
9483

9584
//Initialisation of below compressedOutputStream should happen after writing local file header
@@ -257,4 +246,21 @@ private boolean writeCrc(FileHeader fileHeader) {
257246

258247
return fileHeader.getAesExtraDataRecord().getAesVersion().equals(AesVersion.ONE);
259248
}
249+
250+
private ZipParameters cloneAndPrepareZipParameters(ZipParameters zipParameters) {
251+
ZipParameters clonedZipParameters = new ZipParameters(zipParameters);
252+
253+
if (isZipEntryDirectory(zipParameters.getFileNameInZip())) {
254+
clonedZipParameters.setWriteExtendedLocalFileHeader(false);
255+
clonedZipParameters.setCompressionMethod(CompressionMethod.STORE);
256+
clonedZipParameters.setEncryptFiles(false);
257+
clonedZipParameters.setEntrySize(0);
258+
}
259+
260+
if (zipParameters.getLastModifiedFileTime() <= 0) {
261+
clonedZipParameters.setLastModifiedFileTime(System.currentTimeMillis());
262+
}
263+
264+
return clonedZipParameters;
265+
}
260266
}

src/test/java/net/lingala/zip4j/io/outputstream/ZipOutputStreamIT.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
import net.lingala.zip4j.AbstractIT;
44
import net.lingala.zip4j.ZipFile;
55
import net.lingala.zip4j.exception.ZipException;
6+
import net.lingala.zip4j.io.inputstream.ZipInputStream;
67
import net.lingala.zip4j.model.FileHeader;
8+
import net.lingala.zip4j.model.LocalFileHeader;
79
import net.lingala.zip4j.model.Zip4jConfig;
810
import net.lingala.zip4j.model.ZipParameters;
911
import net.lingala.zip4j.model.enums.AesKeyStrength;
@@ -18,6 +20,7 @@
1820
import org.junit.Test;
1921
import org.junit.rules.ExpectedException;
2022

23+
import java.io.ByteArrayInputStream;
2124
import java.io.ByteArrayOutputStream;
2225
import java.io.File;
2326
import java.io.FileInputStream;
@@ -288,6 +291,25 @@ public void testPutNextEntryWithNullFileNameInZipParameters() throws IOException
288291
}
289292
}
290293

294+
@Test
295+
public void testLastModifiedTimeIsSetWhenItIsNotExplicitlySet() throws IOException {
296+
long currentTime = System.currentTimeMillis();
297+
ByteArrayOutputStream zip = new ByteArrayOutputStream();
298+
299+
try (ZipOutputStream zos = new ZipOutputStream(zip)) {
300+
ZipParameters params = new ZipParameters();
301+
params.setFileNameInZip("test");
302+
zos.putNextEntry(params);
303+
zos.closeEntry();
304+
}
305+
306+
try (ZipInputStream zis = new ZipInputStream(new ByteArrayInputStream(zip.toByteArray()))) {
307+
LocalFileHeader fileHeader = zis.getNextEntry();
308+
long zipTime = fileHeader.getLastModifiedTimeEpoch();
309+
assertThat(currentTime).isLessThan(zipTime + 2000);
310+
}
311+
}
312+
291313
private void testZipOutputStream(CompressionMethod compressionMethod, boolean encrypt,
292314
EncryptionMethod encryptionMethod, AesKeyStrength aesKeyStrength,
293315
AesVersion aesVersion)

0 commit comments

Comments
 (0)