You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2024/01/13 17:15:05 UTC
(commons-compress) branch master updated: Add ZipFile.builder(), add ZipFile.Builder, deprecated constructors.
This is an automated email from the ASF dual-hosted git repository.
ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-compress.git
The following commit(s) were added to refs/heads/master by this push:
new 36e962019 Add ZipFile.builder(), add ZipFile.Builder, deprecated constructors.
36e962019 is described below
commit 36e962019d66e5f873c00d3842a40f573da13d3d
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Sat Jan 13 12:14:59 2024 -0500
Add ZipFile.builder(), add ZipFile.Builder, deprecated constructors.
---
pom.xml | 6 +-
src/changes/changes.xml | 8 +-
.../apache/commons/compress/archivers/Lister.java | 2 +-
.../compress/archivers/examples/Expander.java | 2 +-
.../commons/compress/archivers/zip/ZipFile.java | 133 +++++++++++++++++++++
.../apache/commons/compress/archivers/ZipTest.java | 32 ++---
.../compress/archivers/examples/ExpanderTest.java | 8 +-
.../archivers/jar/JarArchiveOutputStreamTest.java | 2 +-
.../compress/archivers/zip/DataDescriptorTest.java | 2 +-
.../archivers/zip/EncryptedArchiveTest.java | 3 +-
.../compress/archivers/zip/ExplodeSupportTest.java | 2 +-
.../commons/compress/archivers/zip/Lister.java | 2 +-
.../archivers/zip/Maven221MultiVolumeTest.java | 2 +-
.../zip/ParallelScatterZipCreatorTest.java | 4 +-
.../compress/archivers/zip/ScatterSampleTest.java | 2 +-
.../archivers/zip/ScatterZipOutputStreamTest.java | 2 +-
.../compress/archivers/zip/UTF8ZipFilesTest.java | 11 +-
.../archivers/zip/X5455_ExtendedTimestampTest.java | 4 +-
.../compress/archivers/zip/X7875_NewUnixTest.java | 5 +-
.../compress/archivers/zip/Zip64SupportIT.java | 10 +-
.../archivers/zip/ZipArchiveEntryTest.java | 6 +-
.../archivers/zip/ZipArchiveInputStreamTest.java | 2 +-
.../zip/ZipFileIgnoringLocalFileHeaderTest.java | 23 +++-
.../compress/archivers/zip/ZipFileTest.java | 105 +++++++---------
.../archivers/zip/ZipMemoryFileSystemTest.java | 35 +++++-
.../compress/changes/ChangeSetRawTypesTest.java | 2 +-
.../compress/changes/ChangeSetSafeTypesTest.java | 2 +-
.../compressors/deflate64/Deflate64BugsTest.java | 2 +-
.../FramedSnappyCompressorInputStreamTest.java | 2 +-
29 files changed, 292 insertions(+), 129 deletions(-)
diff --git a/pom.xml b/pom.xml
index 19eda46d0..7c5b4d83a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -24,7 +24,7 @@
</parent>
<artifactId>commons-compress</artifactId>
- <version>1.25.1-SNAPSHOT </version>
+ <version>1.26.0-SNAPSHOT </version>
<name>Apache Commons Compress</name>
<url>https://commons.apache.org/proper/commons-compress/</url>
<inceptionYear>2002</inceptionYear> <!-- from NOTICE file -->
@@ -45,8 +45,8 @@ Brotli, Zstandard and ar, cpio, jar, tar, zip, dump, 7z, arj.
<commons.jira.id>COMPRESS</commons.jira.id>
<commons.jira.pid>12310904</commons.jira.pid>
<!-- configuration bits for cutting a release candidate -->
- <commons.release.version>1.25.1</commons.release.version>
- <commons.release.next>1.25.2</commons.release.next>
+ <commons.release.version>1.26.0</commons.release.version>
+ <commons.release.next>1.26.1</commons.release.next>
<commons.bc.version>1.25.0</commons.bc.version>
<commons.rc.version>RC1</commons.rc.version>
<mockito.version>4.11.0</mockito.version>
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index a80d21296..58d9fc160 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -44,8 +44,8 @@ The <action> type attribute can be add,update,fix,remove.
<title>Apache Commons Compress Release Notes</title>
</properties>
<body>
- <release version="1.25.1" date="202Y-MM-DD" description="Minor feature and maintenance release.">
- <!-- FIX -->
+ <release version="1.26.0" date="202Y-MM-DD" description="Minor feature and maintenance release.">
+ <!-- FIX -->
<action type="fix" issue="COMPRESS-632" dev="ggregory" due-to="Yakov Shafranovich, Gary Gregory">Check for invalid PAX values in TarArchiveEntry #438.</action>
<action type="fix" issue="COMPRESS-632" dev="ggregory" due-to="Yakov Shafranovich, Gary Gregory">Fix for zero size headers in ArjInputStream #439.</action>
<action type="fix" issue="COMPRESS-632" dev="ggregory" due-to="Yakov Shafranovich">Fixes and tests for ArInputStream #440.</action>
@@ -65,7 +65,9 @@ The <action> type attribute can be add,update,fix,remove.
<action type="fix" dev="ggregory" due-to="Gary Gregory">Deprecate CRC32VerifyingInputStream.CRC32VerifyingInputStream(InputStream, long, int).</action>
<action type="fix" issue="COMPRESS-655" dev="ggregory" due-to="cpreisler, Gary Gregory">FramedSnappyCompressorOutputStream produces incorrect output when writing a large buffer #457.</action>
<action type="fix" issue="COMPRESS-657" dev="ggregory" due-to="Sebastian Schuberth, Gary Gregory">Fix TAR directory entries being misinterpreted as files #460.</action>
- <!-- UPDATE -->
+ <!-- ADD -->
+ <action type="add" dev="ggregory" due-to="Gary Gregory">Add ZipFile.builder(), add ZipFile.Builder, deprecated constructors.</action>
+ <!-- UPDATE -->
<action type="update" dev="ggregory" due-to="Gary Gregory">Bump commons-lang3 from 3.13.0 to 3.14.0.</action>
<action type="update" dev="ggregory" due-to="Dependabot">Bump com.github.marschall:memoryfilesystem from 2.6.1 to 2.8.0 #444, #458.</action>
<action type="update" dev="ggregory" due-to="Gary Gregory">Bump commons-io from 2.15.0 to 2.15.1.</action>
diff --git a/src/main/java/org/apache/commons/compress/archivers/Lister.java b/src/main/java/org/apache/commons/compress/archivers/Lister.java
index 92042d2d0..77ce67024 100644
--- a/src/main/java/org/apache/commons/compress/archivers/Lister.java
+++ b/src/main/java/org/apache/commons/compress/archivers/Lister.java
@@ -90,7 +90,7 @@ public final class Lister {
}
private static void listZipUsingZipFile(final File file) throws IOException {
- try (ZipFile zipFile = new ZipFile(file)) {
+ try (ZipFile zipFile = ZipFile.builder().setFile(file).get()) {
System.out.println("Created " + zipFile);
for (final Enumeration<ZipArchiveEntry> en = zipFile.getEntries(); en.hasMoreElements();) {
System.out.println(en.nextElement().getName());
diff --git a/src/main/java/org/apache/commons/compress/archivers/examples/Expander.java b/src/main/java/org/apache/commons/compress/archivers/examples/Expander.java
index 3628a07c8..d3e099b84 100644
--- a/src/main/java/org/apache/commons/compress/archivers/examples/Expander.java
+++ b/src/main/java/org/apache/commons/compress/archivers/examples/Expander.java
@@ -410,7 +410,7 @@ public class Expander {
} else if (ArchiveStreamFactory.TAR.equalsIgnoreCase(format)) {
expand(c.track(new TarFile(archive)), targetDirectory);
} else if (ArchiveStreamFactory.ZIP.equalsIgnoreCase(format)) {
- expand(c.track(new ZipFile(archive)), targetDirectory);
+ expand(c.track(ZipFile.builder().setSeekableByteChannel(archive).get()), targetDirectory);
} else if (ArchiveStreamFactory.SEVEN_Z.equalsIgnoreCase(format)) {
expand(c.track(new SevenZFile(archive)), targetDirectory);
} else {
diff --git a/src/main/java/org/apache/commons/compress/archivers/zip/ZipFile.java b/src/main/java/org/apache/commons/compress/archivers/zip/ZipFile.java
index 5be9286f4..2764b5753 100644
--- a/src/main/java/org/apache/commons/compress/archivers/zip/ZipFile.java
+++ b/src/main/java/org/apache/commons/compress/archivers/zip/ZipFile.java
@@ -27,7 +27,9 @@ import java.io.SequenceInputStream;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.channels.SeekableByteChannel;
+import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
+import java.nio.file.OpenOption;
import java.nio.file.Path;
import java.nio.file.StandardOpenOption;
import java.util.Arrays;
@@ -50,6 +52,9 @@ import org.apache.commons.compress.utils.BoundedSeekableByteChannelInputStream;
import org.apache.commons.compress.utils.CharsetNames;
import org.apache.commons.compress.utils.IOUtils;
import org.apache.commons.compress.utils.InputStreamStatistics;
+import org.apache.commons.compress.utils.SeekableInMemoryByteChannel;
+import org.apache.commons.io.build.AbstractOrigin.ByteArrayOrigin;
+import org.apache.commons.io.build.AbstractStreamBuilder;
import org.apache.commons.io.input.CountingInputStream;
/**
@@ -96,6 +101,94 @@ public class ZipFile implements Closeable {
}
}
+ /**
+ * Builds new {@link ZipFile} instances.
+ * <p>
+ * The channel will be opened for reading, assuming the specified encoding for file names.
+ * </p>
+ * <p>
+ * See {@link org.apache.commons.compress.utils.SeekableInMemoryByteChannel} to read from an in-memory archive.
+ * </p>
+ * <p>
+ * By default the central directory record and all local file headers of the archive will be read immediately which may take a considerable amount of time
+ * when the archive is big. The {@code ignoreLocalFileHeader} parameter can be set to {@code true} which restricts parsing to the central directory.
+ * Unfortunately the local file header may contain information not present inside of the central directory which will not be available when the argument is
+ * set to {@code true}. This includes the content of the Unicode extra field, so setting {@code
+ * ignoreLocalFileHeader} to {@code true} means {@code useUnicodeExtraFields} will be ignored effectively.
+ * </p>
+ *
+ * @since 1.26.0
+ */
+ public static class Builder extends AbstractStreamBuilder<ZipFile, Builder> {
+
+ private SeekableByteChannel seekableByteChannel;
+ private boolean useUnicodeExtraFields = true;
+ private boolean ignoreLocalFileHeader;
+
+ public Builder() {
+ setCharset(StandardCharsets.UTF_8);
+ setCharsetDefault(StandardCharsets.UTF_8);
+ }
+
+ @SuppressWarnings("resource") // caller closes
+ @Override
+ public ZipFile get() throws IOException {
+ final SeekableByteChannel actualChannel;
+ final String actualDescription;
+ if (seekableByteChannel != null) {
+ actualChannel = seekableByteChannel;
+ actualDescription = actualChannel.getClass().getSimpleName();
+ } else if (checkOrigin() instanceof ByteArrayOrigin) {
+ actualChannel = new SeekableInMemoryByteChannel(checkOrigin().getByteArray());
+ actualDescription = actualChannel.getClass().getSimpleName();
+ } else {
+ OpenOption[] openOptions = getOpenOptions();
+ if (openOptions.length == 0) {
+ openOptions = new OpenOption[] { StandardOpenOption.READ };
+ }
+ final Path path = getPath();
+ actualChannel = Files.newByteChannel(path, openOptions);
+ actualDescription = path.toString();
+ }
+ final boolean closeOnError = seekableByteChannel != null;
+ return new ZipFile(actualChannel, actualDescription, getCharset().name(), useUnicodeExtraFields, closeOnError, ignoreLocalFileHeader);
+ }
+
+ /**
+ * Sets whether to ignore information stored inside the local file header.
+ *
+ * @param ignoreLocalFileHeader whether to ignore information stored inside.
+ * @return this.
+ */
+ public Builder setIgnoreLocalFileHeader(final boolean ignoreLocalFileHeader) {
+ this.ignoreLocalFileHeader = ignoreLocalFileHeader;
+ return this;
+ }
+
+ /**
+ * The actual channel, overrides any other input aspects like a File, Path, and so on.
+ *
+ * @param seekableByteChannel The actual channel.
+ * @return this.
+ */
+ public Builder setSeekableByteChannel(final SeekableByteChannel seekableByteChannel) {
+ this.seekableByteChannel = seekableByteChannel;
+ return this;
+ }
+
+ /**
+ * Sets whether to use InfoZIP Unicode Extra Fields (if present) to set the file names.
+ *
+ * @param useUnicodeExtraFields whether to use InfoZIP Unicode Extra Fields (if present) to set the file names.
+ * @return this.
+ */
+ public Builder setUseUnicodeExtraFields(final boolean useUnicodeExtraFields) {
+ this.useUnicodeExtraFields = useUnicodeExtraFields;
+ return this;
+ }
+
+ }
+
/**
* Extends ZipArchiveEntry to store the offset within the archive.
*/
@@ -438,13 +531,25 @@ public class ZipFile implements Closeable {
private long firstLocalFileHeaderOffset;
+ /**
+ * Creates a new Builder.
+ *
+ * @return a new Builder.
+ * @since 1.26.0
+ */
+ public static Builder builder() {
+ return new Builder();
+ }
+
/**
* Opens the given file for reading, assuming "UTF8" for file names.
*
* @param file the archive.
*
* @throws IOException if an error occurs while reading the file.
+ * @deprecated Use {@link Builder#get()}.
*/
+ @Deprecated
public ZipFile(final File file) throws IOException {
this(file, CharsetNames.UTF_8);
}
@@ -455,7 +560,9 @@ public class ZipFile implements Closeable {
* @param file the archive.
* @param encoding the encoding to use for file names, use null for the platform's default encoding
* @throws IOException if an error occurs while reading the file.
+ * @deprecated Use {@link Builder#get()}.
*/
+ @Deprecated
public ZipFile(final File file, final String encoding) throws IOException {
this(file.toPath(), encoding, true);
}
@@ -467,7 +574,9 @@ public class ZipFile implements Closeable {
* @param encoding the encoding to use for file names, use null for the platform's default encoding
* @param useUnicodeExtraFields whether to use InfoZIP Unicode Extra Fields (if present) to set the file names.
* @throws IOException if an error occurs while reading the file.
+ * @deprecated Use {@link Builder#get()}.
*/
+ @Deprecated
public ZipFile(final File file, final String encoding, final boolean useUnicodeExtraFields) throws IOException {
this(file.toPath(), encoding, useUnicodeExtraFields, false);
}
@@ -488,7 +597,10 @@ public class ZipFile implements Closeable {
* @param ignoreLocalFileHeader whether to ignore information stored inside the local file header (see the notes in this method's Javadoc)
* @throws IOException if an error occurs while reading the file.
* @since 1.19
+ * @deprecated Use {@link Builder#get()}.
*/
+ @Deprecated
+ @SuppressWarnings("resource") // Caller closes
public ZipFile(final File file, final String encoding, final boolean useUnicodeExtraFields, final boolean ignoreLocalFileHeader) throws IOException {
this(newReadByteChannel(file.toPath()), file.getAbsolutePath(), encoding, useUnicodeExtraFields, true, ignoreLocalFileHeader);
}
@@ -499,7 +611,9 @@ public class ZipFile implements Closeable {
* @param path path to the archive.
* @throws IOException if an error occurs while reading the file.
* @since 1.22
+ * @deprecated Use {@link Builder#get()}.
*/
+ @Deprecated
public ZipFile(final Path path) throws IOException {
this(path, CharsetNames.UTF_8);
}
@@ -511,7 +625,9 @@ public class ZipFile implements Closeable {
* @param encoding the encoding to use for file names, use null for the platform's default encoding
* @throws IOException if an error occurs while reading the file.
* @since 1.22
+ * @deprecated Use {@link Builder#get()}.
*/
+ @Deprecated
public ZipFile(final Path path, final String encoding) throws IOException {
this(path, encoding, true);
}
@@ -524,7 +640,9 @@ public class ZipFile implements Closeable {
* @param useUnicodeExtraFields whether to use InfoZIP Unicode Extra Fields (if present) to set the file names.
* @throws IOException if an error occurs while reading the file.
* @since 1.22
+ * @deprecated Use {@link Builder#get()}.
*/
+ @Deprecated
public ZipFile(final Path path, final String encoding, final boolean useUnicodeExtraFields) throws IOException {
this(path, encoding, useUnicodeExtraFields, false);
}
@@ -545,7 +663,10 @@ public class ZipFile implements Closeable {
* @param ignoreLocalFileHeader whether to ignore information stored inside the local file header (see the notes in this method's Javadoc)
* @throws IOException if an error occurs while reading the file.
* @since 1.22
+ * @deprecated Use {@link Builder#get()}.
*/
+ @SuppressWarnings("resource") // Caller closes
+ @Deprecated
public ZipFile(final Path path, final String encoding, final boolean useUnicodeExtraFields, final boolean ignoreLocalFileHeader) throws IOException {
this(newReadByteChannel(path), path.toAbsolutePath().toString(), encoding, useUnicodeExtraFields, true, ignoreLocalFileHeader);
}
@@ -560,7 +681,9 @@ public class ZipFile implements Closeable {
*
* @throws IOException if an error occurs while reading the file.
* @since 1.13
+ * @deprecated Use {@link Builder#get()}.
*/
+ @Deprecated
public ZipFile(final SeekableByteChannel channel) throws IOException {
this(channel, "a SeekableByteChannel", CharsetNames.UTF_8, true);
}
@@ -575,7 +698,9 @@ public class ZipFile implements Closeable {
* @param encoding the encoding to use for file names, use null for the platform's default encoding
* @throws IOException if an error occurs while reading the file.
* @since 1.13
+ * @deprecated Use {@link Builder#get()}.
*/
+ @Deprecated
public ZipFile(final SeekableByteChannel channel, final String encoding) throws IOException {
this(channel, "a SeekableByteChannel", encoding, true);
}
@@ -592,7 +717,9 @@ public class ZipFile implements Closeable {
* @param useUnicodeExtraFields whether to use InfoZIP Unicode Extra Fields (if present) to set the file names.
* @throws IOException if an error occurs while reading the file.
* @since 1.13
+ * @deprecated Use {@link Builder#get()}.
*/
+ @Deprecated
public ZipFile(final SeekableByteChannel channel, final String channelDescription, final String encoding, final boolean useUnicodeExtraFields)
throws IOException {
this(channel, channelDescription, encoding, useUnicodeExtraFields, false, false);
@@ -618,7 +745,9 @@ public class ZipFile implements Closeable {
* @param ignoreLocalFileHeader whether to ignore information stored inside the local file header (see the notes in this method's Javadoc)
* @throws IOException if an error occurs while reading the file.
* @since 1.19
+ * @deprecated Use {@link Builder#get()}.
*/
+ @Deprecated
public ZipFile(final SeekableByteChannel channel, final String channelDescription, final String encoding, final boolean useUnicodeExtraFields,
final boolean ignoreLocalFileHeader) throws IOException {
this(channel, channelDescription, encoding, useUnicodeExtraFields, false, ignoreLocalFileHeader);
@@ -654,7 +783,9 @@ public class ZipFile implements Closeable {
*
* @param name name of the archive.
* @throws IOException if an error occurs while reading the file.
+ * @deprecated Use {@link Builder#get()}.
*/
+ @Deprecated
public ZipFile(final String name) throws IOException {
this(new File(name).toPath(), CharsetNames.UTF_8);
}
@@ -665,7 +796,9 @@ public class ZipFile implements Closeable {
* @param name name of the archive.
* @param encoding the encoding to use for file names, use null for the platform's default encoding
* @throws IOException if an error occurs while reading the file.
+ * @deprecated Use {@link Builder#get()}.
*/
+ @Deprecated
public ZipFile(final String name, final String encoding) throws IOException {
this(new File(name).toPath(), encoding, true);
}
diff --git a/src/test/java/org/apache/commons/compress/archivers/ZipTest.java b/src/test/java/org/apache/commons/compress/archivers/ZipTest.java
index 9eea8ae0c..7d28baf4e 100644
--- a/src/test/java/org/apache/commons/compress/archivers/ZipTest.java
+++ b/src/test/java/org/apache/commons/compress/archivers/ZipTest.java
@@ -89,8 +89,8 @@ public final class ZipTest extends AbstractTest {
private void assertSameFileContents(final File expectedFile, final File actualFile) throws IOException {
final int size = (int) Math.max(expectedFile.length(), actualFile.length());
- try (ZipFile expected = new ZipFile(expectedFile);
- ZipFile actual = new ZipFile(actualFile)) {
+ try (ZipFile expected = newZipFile(expectedFile);
+ ZipFile actual = newZipFile(actualFile)) {
final byte[] expectedBuf = new byte[size];
final byte[] actualBuf = new byte[size];
@@ -174,7 +174,7 @@ public final class ZipTest extends AbstractTest {
private File getFilesToZip() throws IOException {
final File originalZipFile = getFile("COMPRESS-477/split_zip_created_by_zip/zip_to_compare_created_by_zip.zip");
- try (ZipFile zipFile = new ZipFile(originalZipFile)) {
+ try (ZipFile zipFile = newZipFile(originalZipFile)) {
final Enumeration<ZipArchiveEntry> zipEntries = zipFile.getEntries();
ZipArchiveEntry zipEntry;
File outputFile;
@@ -205,6 +205,10 @@ public final class ZipTest extends AbstractTest {
return getTempDirFile().listFiles()[0];
}
+ private ZipFile newZipFile(final File file) throws IOException {
+ return ZipFile.builder().setFile(file).get();
+ }
+
private void readStream(final InputStream in, final ArchiveEntry entry, final Map<String, List<List<Long>>> map) throws IOException {
final byte[] buf = new byte[4096];
final InputStreamStatistics stats = (InputStreamStatistics) in;
@@ -300,8 +304,8 @@ public final class ZipTest extends AbstractTest {
createSecondEntry(zos1).close();
}
- try (ZipFile zipFile1 = new ZipFile(file1);
- ZipFile zipFile2 = new ZipFile(file2)) {
+ try (ZipFile zipFile1 = newZipFile(file1);
+ ZipFile zipFile2 = newZipFile(file2)) {
final File fileResult = createTempFile("file-actual.", ".zip");
try (ZipArchiveOutputStream zos2 = new ZipArchiveOutputStream(fileResult)) {
zipFile1.copyRawEntries(zos2, allFilesPredicate);
@@ -330,7 +334,7 @@ public final class ZipTest extends AbstractTest {
}
final File fileResult = createTempFile("file-actual.", ".zip");
- try (ZipFile zipFile1 = new ZipFile(file1)) {
+ try (ZipFile zipFile1 = newZipFile(file1)) {
try (ZipArchiveOutputStream zos2 = new ZipArchiveOutputStream(fileResult)) {
zos2.setUseZip64(Zip64Mode.Always);
zipFile1.copyRawEntries(zos2, allFilesPredicate);
@@ -350,7 +354,7 @@ public final class ZipTest extends AbstractTest {
zos.putArchiveEntry(in);
zos.closeArchiveEntry();
}
- try (ZipFile zf = new ZipFile(archive)) {
+ try (ZipFile zf = newZipFile(archive)) {
final ZipArchiveEntry out = zf.getEntry("foo/");
assertNotNull(out);
assertEquals("foo/", out.getName());
@@ -372,7 +376,7 @@ public final class ZipTest extends AbstractTest {
zos.putArchiveEntry(in);
zos.closeArchiveEntry();
}
- try (ZipFile zf = new ZipFile(archive)) {
+ try (ZipFile zf = newZipFile(archive)) {
final ZipArchiveEntry out = zf.getEntry("foo/");
assertNotNull(out);
assertEquals("foo/", out.getName());
@@ -399,7 +403,7 @@ public final class ZipTest extends AbstractTest {
}
zos.closeArchiveEntry();
}
- try (ZipFile zf = new ZipFile(archive)) {
+ try (ZipFile zf = newZipFile(archive)) {
final ZipArchiveEntry out = zf.getEntry("foo");
assertNotNull(out);
assertEquals("foo", out.getName());
@@ -424,7 +428,7 @@ public final class ZipTest extends AbstractTest {
}
zos.closeArchiveEntry();
}
- try (ZipFile zf = new ZipFile(archive)) {
+ try (ZipFile zf = newZipFile(archive)) {
final ZipArchiveEntry out = zf.getEntry("foo");
assertNotNull(out);
assertEquals("foo", out.getName());
@@ -448,7 +452,7 @@ public final class ZipTest extends AbstractTest {
}
// file access
- try (ZipFile zf = new ZipFile(input)) {
+ try (ZipFile zf = newZipFile(input)) {
final Enumeration<ZipArchiveEntry> entries = zf.getEntries();
while (entries.hasMoreElements()) {
final ZipArchiveEntry zae = entries.nextElement();
@@ -590,7 +594,7 @@ public final class ZipTest extends AbstractTest {
*/
@Test
public void testTokenizationCompressionMethod() throws IOException {
- try (ZipFile moby = new ZipFile(getFile("moby.zip"))) {
+ try (ZipFile moby = ZipFile.builder().setFile(getFile("moby.zip")).get()) {
final ZipArchiveEntry entry = moby.getEntry("README");
assertEquals(ZipMethod.TOKENIZATION.getCode(), entry.getMethod(), "method");
assertFalse(moby.canReadEntryData(entry));
@@ -608,7 +612,7 @@ public final class ZipTest extends AbstractTest {
archiveEntry.setCompressedSize(3);
zos.addRawArchiveEntry(archiveEntry, new ByteArrayInputStream("fud".getBytes()));
}
- try (ZipFile zf1 = new ZipFile(file1)) {
+ try (ZipFile zf1 = newZipFile(file1)) {
final ZipArchiveEntry fred = zf1.getEntry("fred");
assertEquals(0664, fred.getUnixMode());
}
@@ -719,7 +723,7 @@ public final class ZipTest extends AbstractTest {
}
zos.closeArchiveEntry();
}
- try (ZipFile zf = new ZipFile(archiveFile)) {
+ try (ZipFile zf = newZipFile(archiveFile)) {
final ZipArchiveEntry out = zf.getEntry("foo");
assertNotNull(out);
assertEquals("foo", out.getName());
diff --git a/src/test/java/org/apache/commons/compress/archivers/examples/ExpanderTest.java b/src/test/java/org/apache/commons/compress/archivers/examples/ExpanderTest.java
index b8bf54f1a..712052e5c 100644
--- a/src/test/java/org/apache/commons/compress/archivers/examples/ExpanderTest.java
+++ b/src/test/java/org/apache/commons/compress/archivers/examples/ExpanderTest.java
@@ -183,7 +183,7 @@ public class ExpanderTest extends AbstractTest {
@Test
public void testFileCantEscapeDoubleDotPath() throws IOException, ArchiveException {
setupZip("../foo");
- try (ZipFile f = new ZipFile(archive)) {
+ try (ZipFile f = ZipFile.builder().setFile(archive).get()) {
assertThrows(IOException.class, () -> new Expander().expand(f, tempResultDir));
}
}
@@ -196,7 +196,7 @@ public class ExpanderTest extends AbstractTest {
s.mkdirs();
assumeTrue(s.exists());
setupZip("../" + sibling + "/a");
- try (ZipFile f = new ZipFile(archive)) {
+ try (ZipFile f = ZipFile.builder().setFile(archive).get()) {
assertThrows(IOException.class, () -> new Expander().expand(f, tempResultDir));
}
}
@@ -204,7 +204,7 @@ public class ExpanderTest extends AbstractTest {
@Test
public void testFileCantEscapeViaAbsolutePath() throws IOException, ArchiveException {
setupZip("/tmp/foo");
- try (ZipFile f = new ZipFile(archive)) {
+ try (ZipFile f = ZipFile.builder().setFile(archive).get()) {
assertThrows(IOException.class, () -> new Expander().expand(f, tempResultDir));
}
assertFalse(new File(tempResultDir, "tmp/foo").isFile());
@@ -270,7 +270,7 @@ public class ExpanderTest extends AbstractTest {
@Test
public void testZipFileVersion() throws IOException, ArchiveException {
setupZip();
- try (ZipFile f = new ZipFile(archive)) {
+ try (ZipFile f = ZipFile.builder().setFile(archive).get()) {
new Expander().expand(f, tempResultDir);
}
verifyTargetDir();
diff --git a/src/test/java/org/apache/commons/compress/archivers/jar/JarArchiveOutputStreamTest.java b/src/test/java/org/apache/commons/compress/archivers/jar/JarArchiveOutputStreamTest.java
index 8940be61e..8883b8e9d 100644
--- a/src/test/java/org/apache/commons/compress/archivers/jar/JarArchiveOutputStreamTest.java
+++ b/src/test/java/org/apache/commons/compress/archivers/jar/JarArchiveOutputStreamTest.java
@@ -53,7 +53,7 @@ public class JarArchiveOutputStreamTest extends AbstractTempDirTest {
out.closeArchiveEntry();
out.finish();
}
- try (ZipFile zf = new ZipFile(testArchive)) {
+ try (ZipFile zf = ZipFile.builder().setPath(testArchive).get()) {
ZipArchiveEntry ze = zf.getEntry("foo/");
assertNotNull(ze);
ZipExtraField[] fes = ze.getExtraFields();
diff --git a/src/test/java/org/apache/commons/compress/archivers/zip/DataDescriptorTest.java b/src/test/java/org/apache/commons/compress/archivers/zip/DataDescriptorTest.java
index b9e3125f8..d18ce4519 100644
--- a/src/test/java/org/apache/commons/compress/archivers/zip/DataDescriptorTest.java
+++ b/src/test/java/org/apache/commons/compress/archivers/zip/DataDescriptorTest.java
@@ -96,7 +96,7 @@ public class DataDescriptorTest {
}
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
- try (ZipFile zf = new ZipFile(f);
+ try (ZipFile zf = ZipFile.builder().setFile(f).get();
ZipArchiveOutputStream zos = new ZipArchiveOutputStream(baos)) {
final ZipArchiveEntry zae = zf.getEntry("test1.txt");
try (InputStream rawInputStream = zf.getRawInputStream(zae)) {
diff --git a/src/test/java/org/apache/commons/compress/archivers/zip/EncryptedArchiveTest.java b/src/test/java/org/apache/commons/compress/archivers/zip/EncryptedArchiveTest.java
index f0e48fda5..66937ba03 100644
--- a/src/test/java/org/apache/commons/compress/archivers/zip/EncryptedArchiveTest.java
+++ b/src/test/java/org/apache/commons/compress/archivers/zip/EncryptedArchiveTest.java
@@ -51,8 +51,7 @@ public class EncryptedArchiveTest {
@Test
public void testReadPasswordEncryptedEntryViaZipFile() throws IOException {
- final File file = getFile("password-encrypted.zip");
- try (ZipFile zf = new ZipFile(file)) {
+ try (ZipFile zf = ZipFile.builder().setFile(getFile("password-encrypted.zip")).get()) {
final ZipArchiveEntry zae = zf.getEntry("LICENSE.txt");
assertTrue(zae.getGeneralPurposeBit().usesEncryption());
assertFalse(zae.getGeneralPurposeBit().usesStrongEncryption());
diff --git a/src/test/java/org/apache/commons/compress/archivers/zip/ExplodeSupportTest.java b/src/test/java/org/apache/commons/compress/archivers/zip/ExplodeSupportTest.java
index f864173d7..dcd8da280 100644
--- a/src/test/java/org/apache/commons/compress/archivers/zip/ExplodeSupportTest.java
+++ b/src/test/java/org/apache/commons/compress/archivers/zip/ExplodeSupportTest.java
@@ -39,7 +39,7 @@ import org.junit.jupiter.api.Test;
public class ExplodeSupportTest {
private void testArchiveWithImplodeCompression(final String fileName, final String entryName) throws IOException {
- try (ZipFile zip = new ZipFile(new File(fileName))) {
+ try (ZipFile zip = ZipFile.builder().setFile(fileName).get()) {
final ZipArchiveEntry entry = zip.getEntries().nextElement();
assertEquals(entryName, entry.getName(), "entry name");
assertTrue(zip.canReadEntryData(entry), "entry can't be read");
diff --git a/src/test/java/org/apache/commons/compress/archivers/zip/Lister.java b/src/test/java/org/apache/commons/compress/archivers/zip/Lister.java
index 549436691..27741bacd 100644
--- a/src/test/java/org/apache/commons/compress/archivers/zip/Lister.java
+++ b/src/test/java/org/apache/commons/compress/archivers/zip/Lister.java
@@ -77,7 +77,7 @@ public final class Lister {
}
}
} else {
- try (ZipFile zf = new ZipFile(f, cl.encoding)) {
+ try (ZipFile zf = ZipFile.builder().setFile(f).setCharset(cl.encoding).get()) {
for (final Enumeration<ZipArchiveEntry> entries = zf.getEntries(); entries.hasMoreElements();) {
final ZipArchiveEntry ze = entries.nextElement();
list(ze);
diff --git a/src/test/java/org/apache/commons/compress/archivers/zip/Maven221MultiVolumeTest.java b/src/test/java/org/apache/commons/compress/archivers/zip/Maven221MultiVolumeTest.java
index 36d87a73b..624f6ad15 100644
--- a/src/test/java/org/apache/commons/compress/archivers/zip/Maven221MultiVolumeTest.java
+++ b/src/test/java/org/apache/commons/compress/archivers/zip/Maven221MultiVolumeTest.java
@@ -62,7 +62,7 @@ public class Maven221MultiVolumeTest extends AbstractTest {
@Test
public void testRead7ZipMultiVolumeArchiveForFile() {
- assertThrows(IOException.class, () -> new ZipFile(getFile("apache-maven-2.2.1.zip.001")));
+ assertThrows(IOException.class, () -> ZipFile.builder().setFile(getFile("apache-maven-2.2.1.zip.001")).get());
}
@Test
diff --git a/src/test/java/org/apache/commons/compress/archivers/zip/ParallelScatterZipCreatorTest.java b/src/test/java/org/apache/commons/compress/archivers/zip/ParallelScatterZipCreatorTest.java
index 4c72b87b6..69fec3b27 100644
--- a/src/test/java/org/apache/commons/compress/archivers/zip/ParallelScatterZipCreatorTest.java
+++ b/src/test/java/org/apache/commons/compress/archivers/zip/ParallelScatterZipCreatorTest.java
@@ -107,7 +107,7 @@ public class ParallelScatterZipCreatorTest extends AbstractTempDirTest {
}
// validate the content of the compressed files
- try (ZipFile zf = new ZipFile(result)) {
+ try (ZipFile zf = ZipFile.builder().setFile(result).get()) {
final Enumeration<ZipArchiveEntry> entriesInPhysicalOrder = zf.getEntriesInPhysicalOrder();
while (entriesInPhysicalOrder.hasMoreElements()) {
final ZipArchiveEntry zipArchiveEntry = entriesInPhysicalOrder.nextElement();
@@ -131,7 +131,7 @@ public class ParallelScatterZipCreatorTest extends AbstractTempDirTest {
}
private void removeEntriesFoundInZipFile(final File result, final Map<String, byte[]> entries) throws IOException {
- try (ZipFile zf = new ZipFile(result)) {
+ try (ZipFile zf = ZipFile.builder().setFile(result).get()) {
final Enumeration<ZipArchiveEntry> entriesInPhysicalOrder = zf.getEntriesInPhysicalOrder();
int i = 0;
while (entriesInPhysicalOrder.hasMoreElements()) {
diff --git a/src/test/java/org/apache/commons/compress/archivers/zip/ScatterSampleTest.java b/src/test/java/org/apache/commons/compress/archivers/zip/ScatterSampleTest.java
index 91b3a9c29..0f1a54329 100644
--- a/src/test/java/org/apache/commons/compress/archivers/zip/ScatterSampleTest.java
+++ b/src/test/java/org/apache/commons/compress/archivers/zip/ScatterSampleTest.java
@@ -34,7 +34,7 @@ import org.junit.jupiter.api.Test;
public class ScatterSampleTest extends AbstractTempDirTest {
private void checkFile(final File result) throws IOException {
- try (ZipFile zipFile = new ZipFile(result)) {
+ try (ZipFile zipFile = ZipFile.builder().setFile(result).get()) {
final ZipArchiveEntry archiveEntry1 = zipFile.getEntries().nextElement();
assertEquals("test1.xml", archiveEntry1.getName());
try (InputStream inputStream = zipFile.getInputStream(archiveEntry1)) {
diff --git a/src/test/java/org/apache/commons/compress/archivers/zip/ScatterZipOutputStreamTest.java b/src/test/java/org/apache/commons/compress/archivers/zip/ScatterZipOutputStreamTest.java
index 692cf0f1d..006845ddf 100644
--- a/src/test/java/org/apache/commons/compress/archivers/zip/ScatterZipOutputStreamTest.java
+++ b/src/test/java/org/apache/commons/compress/archivers/zip/ScatterZipOutputStreamTest.java
@@ -59,7 +59,7 @@ public class ScatterZipOutputStreamTest extends AbstractTempDirTest {
}
}
- try (ZipFile zf = new ZipFile(target)) {
+ try (ZipFile zf = ZipFile.builder().setFile(target).get()) {
final ZipArchiveEntry bEntry = zf.getEntries("b.txt").iterator().next();
assertEquals(8, bEntry.getSize());
try (InputStream inputStream = zf.getInputStream(bEntry)) {
diff --git a/src/test/java/org/apache/commons/compress/archivers/zip/UTF8ZipFilesTest.java b/src/test/java/org/apache/commons/compress/archivers/zip/UTF8ZipFilesTest.java
index bf358743a..52661f306 100644
--- a/src/test/java/org/apache/commons/compress/archivers/zip/UTF8ZipFilesTest.java
+++ b/src/test/java/org/apache/commons/compress/archivers/zip/UTF8ZipFilesTest.java
@@ -29,6 +29,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.nio.ByteBuffer;
import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.util.Enumeration;
import java.util.zip.CRC32;
@@ -128,7 +129,7 @@ public class UTF8ZipFilesTest extends AbstractTest {
}
private static void testFile(final File file, final String encoding) throws IOException {
- try (ZipFile zf = new ZipFile(file, encoding, false)) {
+ try (ZipFile zf = ZipFile.builder().setFile(file).setCharset(encoding).setUseUnicodeExtraFields(false).get()) {
final Enumeration<ZipArchiveEntry> e = zf.getEntries();
while (e.hasMoreElements()) {
final ZipArchiveEntry ze = e.nextElement();
@@ -188,7 +189,7 @@ public class UTF8ZipFilesTest extends AbstractTest {
@Test
public void testRawNameReadFromZipFile() throws IOException {
final File archive = getFile("utf8-7zip-test.zip");
- try (ZipFile zf = new ZipFile(archive, CP437, false)) {
+ try (ZipFile zf = ZipFile.builder().setFile(archive).setCharset(CP437).setUseUnicodeExtraFields(false).get()) {
assertRawNameOfAcsiiTxt(zf.getEntry(ASCII_TXT));
}
}
@@ -228,7 +229,7 @@ public class UTF8ZipFilesTest extends AbstractTest {
if (Charset.defaultCharset() != UTF_8) {
encoding = UTF_8.name();
}
- try (ZipFile zf = new ZipFile(archive, encoding, true)) {
+ try (ZipFile zf = ZipFile.builder().setFile(archive).setCharset(encoding).setUseUnicodeExtraFields(true).get()) {
assertCanRead(zf, ASCII_TXT);
assertCanRead(zf, EURO_FOR_DOLLAR_TXT);
assertCanRead(zf, OIL_BARREL_TXT);
@@ -295,7 +296,7 @@ public class UTF8ZipFilesTest extends AbstractTest {
public void testZipArchiveInputStreamReadsUnicodeFields() throws IOException {
final File file = createTempFile("unicode-test", ".zip");
createTestFile(file, CharsetNames.US_ASCII, false, true);
- try (ZipFile zf = new ZipFile(file, CharsetNames.US_ASCII, true)) {
+ try (ZipFile zf = ZipFile.builder().setFile(file).setCharset(StandardCharsets.US_ASCII).setUseUnicodeExtraFields(true).get()) {
assertNotNull(zf.getEntry(ASCII_TXT));
assertNotNull(zf.getEntry(EURO_FOR_DOLLAR_TXT));
assertNotNull(zf.getEntry(OIL_BARREL_TXT));
@@ -318,7 +319,7 @@ public class UTF8ZipFilesTest extends AbstractTest {
*/
@Test
public void testZipFileSkipsOverUnicodeExtraFieldWithUnsupportedVersion() throws IOException {
- try (ZipFile zf = new ZipFile(getFile("COMPRESS-479.zip"))) {
+ try (ZipFile zf = ZipFile.builder().setFile(getFile("COMPRESS-479.zip")).get()) {
assertNotNull(zf.getEntry(ASCII_TXT));
assertNotNull(zf.getEntry("%U20AC_for_Dollar.txt"));
assertNotNull(zf.getEntry(OIL_BARREL_TXT));
diff --git a/src/test/java/org/apache/commons/compress/archivers/zip/X5455_ExtendedTimestampTest.java b/src/test/java/org/apache/commons/compress/archivers/zip/X5455_ExtendedTimestampTest.java
index 4d7c62d22..c6ffc71ba 100644
--- a/src/test/java/org/apache/commons/compress/archivers/zip/X5455_ExtendedTimestampTest.java
+++ b/src/test/java/org/apache/commons/compress/archivers/zip/X5455_ExtendedTimestampTest.java
@@ -478,7 +478,7 @@ public class X5455_ExtendedTimestampTest {
final File archive = AbstractTest.getFile("COMPRESS-210_unix_time_zip_test.zip");
- try (ZipFile zf = new ZipFile(archive)) {
+ try (ZipFile zf = ZipFile.builder().setFile(archive).get()) {
final Enumeration<ZipArchiveEntry> en = zf.getEntries();
// We expect EVERY entry of this ZIP file
@@ -566,7 +566,7 @@ public class X5455_ExtendedTimestampTest {
os.closeArchiveEntry();
}
- try (ZipFile zf = new ZipFile(output)) {
+ try (ZipFile zf = ZipFile.builder().setFile(output).get()) {
final ZipArchiveEntry ze = zf.getEntry("foo");
final X5455_ExtendedTimestamp ext = (X5455_ExtendedTimestamp) ze.getExtraField(X5455);
assertNotNull(ext);
diff --git a/src/test/java/org/apache/commons/compress/archivers/zip/X7875_NewUnixTest.java b/src/test/java/org/apache/commons/compress/archivers/zip/X7875_NewUnixTest.java
index fbc1f16f7..6ec397546 100644
--- a/src/test/java/org/apache/commons/compress/archivers/zip/X7875_NewUnixTest.java
+++ b/src/test/java/org/apache/commons/compress/archivers/zip/X7875_NewUnixTest.java
@@ -25,7 +25,6 @@ import static org.junit.jupiter.api.Assertions.assertNotEquals;
import static org.junit.jupiter.api.Assertions.assertSame;
import static org.junit.jupiter.api.Assertions.assertTrue;
-import java.io.File;
import java.util.Enumeration;
import java.util.zip.ZipException;
@@ -167,9 +166,7 @@ public class X7875_NewUnixTest {
@Test
public void testSampleFile() throws Exception {
- final File archive = getFile("COMPRESS-211_uid_gid_zip_test.zip");
-
- try (ZipFile zf = new ZipFile(archive)) {
+ try (ZipFile zf = ZipFile.builder().setFile(getFile("COMPRESS-211_uid_gid_zip_test.zip")).get()) {
final Enumeration<ZipArchiveEntry> en = zf.getEntries();
// We expect EVERY entry of this ZIP file (dir & file) to
diff --git a/src/test/java/org/apache/commons/compress/archivers/zip/Zip64SupportIT.java b/src/test/java/org/apache/commons/compress/archivers/zip/Zip64SupportIT.java
index daddfcb01..6885a15f7 100644
--- a/src/test/java/org/apache/commons/compress/archivers/zip/Zip64SupportIT.java
+++ b/src/test/java/org/apache/commons/compress/archivers/zip/Zip64SupportIT.java
@@ -161,7 +161,7 @@ public class Zip64SupportIT {
private static void read100KFilesUsingZipFileImpl(final File f) throws IOException {
ZipFile zf = null;
try {
- zf = new ZipFile(f);
+ zf = ZipFile.builder().setFile(f).get();
int files = 0;
for (final Enumeration<ZipArchiveEntry> e = zf.getEntries(); e.hasMoreElements();) {
final ZipArchiveEntry zae = e.nextElement();
@@ -206,7 +206,7 @@ public class Zip64SupportIT {
private static void read5GBOfZerosUsingZipFileImpl(final File f, final String expectedName) throws IOException {
ZipFile zf = null;
try {
- zf = new ZipFile(f);
+ zf = ZipFile.builder().setFile(f).get();;
final Enumeration<ZipArchiveEntry> e = zf.getEntries();
assertTrue(e.hasMoreElements());
ZipArchiveEntry zae = e.nextElement();
@@ -1892,7 +1892,7 @@ public class Zip64SupportIT {
write3EntriesCreatingBigArchiveToStream(zos);
ZipFile zf = null;
try {
- zf = new ZipFile(f);
+ zf = ZipFile.builder().setFile(f).get();;
int idx = 0;
for (final Enumeration<ZipArchiveEntry> e = zf.getEntriesInPhysicalOrder(); e.hasMoreElements();) {
final ZipArchiveEntry zae = e.nextElement();
@@ -2285,7 +2285,7 @@ public class Zip64SupportIT {
// start will not be set in extra fields
final File zipUsingModeAlwaysWithCompatibility = buildZipWithZip64Mode("testZip64ModeAlwaysWithCompatibility-output-1",
Zip64Mode.AlwaysWithCompatibility, inputFile);
- final ZipFile zipFileWithAlwaysWithCompatibility = new ZipFile(zipUsingModeAlwaysWithCompatibility);
+ final ZipFile zipFileWithAlwaysWithCompatibility = ZipFile.builder().setFile(zipUsingModeAlwaysWithCompatibility).get();
ZipArchiveEntry entry = zipFileWithAlwaysWithCompatibility.getEntries().nextElement();
for (final ZipExtraField extraField : entry.getExtraFields()) {
if (!(extraField instanceof Zip64ExtendedInformationExtraField)) {
@@ -2299,7 +2299,7 @@ public class Zip64SupportIT {
// with Zip64Mode.Always, the relative header offset and disk number start will be
// set in extra fields
final File zipUsingModeAlways = buildZipWithZip64Mode("testZip64ModeAlwaysWithCompatibility-output-2", Zip64Mode.Always, inputFile);
- final ZipFile zipFileWithAlways = new ZipFile(zipUsingModeAlways);
+ final ZipFile zipFileWithAlways = ZipFile.builder().setFile(zipUsingModeAlways).get();
entry = zipFileWithAlways.getEntries().nextElement();
for (final ZipExtraField extraField : entry.getExtraFields()) {
if (!(extraField instanceof Zip64ExtendedInformationExtraField)) {
diff --git a/src/test/java/org/apache/commons/compress/archivers/zip/ZipArchiveEntryTest.java b/src/test/java/org/apache/commons/compress/archivers/zip/ZipArchiveEntryTest.java
index 1fbca4a70..09d55ff7e 100644
--- a/src/test/java/org/apache/commons/compress/archivers/zip/ZipArchiveEntryTest.java
+++ b/src/test/java/org/apache/commons/compress/archivers/zip/ZipArchiveEntryTest.java
@@ -258,7 +258,7 @@ public class ZipArchiveEntryTest {
*/
@Test
public void testIsUnixSymlinkIsFalseIfMoreThanOneFlagIsSet() throws Exception {
- try (ZipFile zf = new ZipFile(getFile("COMPRESS-379.jar"))) {
+ try (ZipFile zf = ZipFile.builder().setFile(getFile("COMPRESS-379.jar")).get()) {
final ZipArchiveEntry ze = zf.getEntry("META-INF/maven/");
assertFalse(ze.isUnixSymlink());
}
@@ -312,7 +312,7 @@ public class ZipArchiveEntryTest {
@Test
public void testReparsingUnicodeExtraWithUnsupportedversionThrowsInStrictMode() throws Exception {
- try (ZipFile zf = new ZipFile(getFile("COMPRESS-479.zip"))) {
+ try (ZipFile zf = ZipFile.builder().setFile(getFile("COMPRESS-479.zip")).get()) {
final ZipArchiveEntry ze = zf.getEntry("%U20AC_for_Dollar.txt");
assertThrows(ZipException.class, () -> ze.getExtraFields(ZipArchiveEntry.ExtraFieldParsingMode.STRICT_FOR_KNOW_EXTRA_FIELDS));
}
@@ -512,7 +512,7 @@ public class ZipArchiveEntryTest {
@Test
public void testZipArchiveClone() throws Exception {
- try (ZipFile zf = new ZipFile(getFile("COMPRESS-479.zip"))) {
+ try (ZipFile zf = ZipFile.builder().setFile(getFile("COMPRESS-479.zip")).get()) {
final ZipArchiveEntry ze = zf.getEntry("%U20AC_for_Dollar.txt");
final ZipArchiveEntry clonedZe = (ZipArchiveEntry) ze.clone();
assertEquals(ze, clonedZe);
diff --git a/src/test/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStreamTest.java b/src/test/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStreamTest.java
index 6391e40a5..245611d85 100644
--- a/src/test/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStreamTest.java
+++ b/src/test/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStreamTest.java
@@ -341,7 +341,7 @@ public class ZipArchiveInputStreamTest extends AbstractTest {
*/
@Test
public void testProperUseOfInflater() throws Exception {
- try (ZipFile zf = new ZipFile(getFile("COMPRESS-189.zip"))) {
+ try (ZipFile zf = ZipFile.builder().setFile(getFile("COMPRESS-189.zip")).get()) {
final ZipArchiveEntry zae = zf.getEntry("USD0558682-20080101.ZIP");
try (ZipArchiveInputStream in = new ZipArchiveInputStream(new BufferedInputStream(zf.getInputStream(zae)))) {
ZipArchiveEntry innerEntry;
diff --git a/src/test/java/org/apache/commons/compress/archivers/zip/ZipFileIgnoringLocalFileHeaderTest.java b/src/test/java/org/apache/commons/compress/archivers/zip/ZipFileIgnoringLocalFileHeaderTest.java
index 84fb8d885..8c7b0fd9f 100644
--- a/src/test/java/org/apache/commons/compress/archivers/zip/ZipFileIgnoringLocalFileHeaderTest.java
+++ b/src/test/java/org/apache/commons/compress/archivers/zip/ZipFileIgnoringLocalFileHeaderTest.java
@@ -33,16 +33,27 @@ import org.junit.jupiter.api.io.TempDir;
public class ZipFileIgnoringLocalFileHeaderTest {
- private static ZipFile openZipWithoutLFH(final String fileName) throws IOException {
+ private static ZipFile openZipWithoutLocalFileHeaderDeprecated(final String fileName) throws IOException {
return new ZipFile(AbstractTest.getFile(fileName), CharsetNames.UTF_8, true, true);
}
+ private static ZipFile openZipWithoutLocalFileHeader(final String fileName) throws IOException {
+ // @formatter:off
+ return ZipFile.builder()
+ .setFile(AbstractTest.getFile(fileName))
+ .setCharset(CharsetNames.UTF_8)
+ .setUseUnicodeExtraFields(true)
+ .setIgnoreLocalFileHeader(true)
+ .get();
+ // @formatter:on
+ }
+
@TempDir
private File dir;
@Test
public void testDuplicateEntry() throws Exception {
- try (ZipFile zf = openZipWithoutLFH("COMPRESS-227.zip")) {
+ try (ZipFile zf = openZipWithoutLocalFileHeader("COMPRESS-227.zip")) {
int numberOfEntries = 0;
for (final ZipArchiveEntry entry : zf.getEntries("test1.txt")) {
numberOfEntries++;
@@ -56,7 +67,7 @@ public class ZipFileIgnoringLocalFileHeaderTest {
@Test
public void testGetEntryWorks() throws IOException {
- try (ZipFile zf = openZipWithoutLFH("bla.zip")) {
+ try (ZipFile zf = openZipWithoutLocalFileHeader("bla.zip")) {
final ZipArchiveEntry ze = zf.getEntry("test1.xml");
assertEquals(610, ze.getSize());
}
@@ -64,7 +75,7 @@ public class ZipFileIgnoringLocalFileHeaderTest {
@Test
public void testGetRawInputStreamReturnsNotNull() throws IOException {
- try (ZipFile zf = openZipWithoutLFH("bla.zip")) {
+ try (ZipFile zf = openZipWithoutLocalFileHeader("bla.zip")) {
final ZipArchiveEntry ze = zf.getEntry("test1.xml");
try (InputStream rawInputStream = zf.getRawInputStream(ze)) {
assertNotNull(rawInputStream);
@@ -74,7 +85,7 @@ public class ZipFileIgnoringLocalFileHeaderTest {
@Test
public void testPhysicalOrder() throws IOException {
- try (ZipFile zf = openZipWithoutLFH("ordertest.zip")) {
+ try (ZipFile zf = openZipWithoutLocalFileHeader("ordertest.zip")) {
final Enumeration<ZipArchiveEntry> e = zf.getEntriesInPhysicalOrder();
ZipArchiveEntry ze;
do {
@@ -91,7 +102,7 @@ public class ZipFileIgnoringLocalFileHeaderTest {
*/
@Test
public void testZipUnarchive() throws Exception {
- try (ZipFile zf = openZipWithoutLFH("bla.zip")) {
+ try (ZipFile zf = openZipWithoutLocalFileHeaderDeprecated("bla.zip")) {
for (final Enumeration<ZipArchiveEntry> e = zf.getEntries(); e.hasMoreElements();) {
final ZipArchiveEntry entry = e.nextElement();
try (InputStream inputStream = zf.getInputStream(entry)) {
diff --git a/src/test/java/org/apache/commons/compress/archivers/zip/ZipFileTest.java b/src/test/java/org/apache/commons/compress/archivers/zip/ZipFileTest.java
index 85fd1af44..7d2c1ad14 100644
--- a/src/test/java/org/apache/commons/compress/archivers/zip/ZipFileTest.java
+++ b/src/test/java/org/apache/commons/compress/archivers/zip/ZipFileTest.java
@@ -18,6 +18,7 @@
package org.apache.commons.compress.archivers.zip;
import static java.nio.charset.StandardCharsets.UTF_8;
+import static org.apache.commons.compress.AbstractTest.getFile;
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -35,6 +36,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.channels.SeekableByteChannel;
+import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
@@ -73,7 +75,7 @@ public class ZipFileTest extends AbstractTest {
}
private static void nameSource(final String archive, final String entry, final ZipArchiveEntry.NameSource expected) throws Exception {
- try (ZipFile zf = new ZipFile(getFile(archive))) {
+ try (ZipFile zf = ZipFile.builder().setFile(getFile(archive)).get()) {
final ZipArchiveEntry ze = zf.getEntry(entry);
assertEquals(entry, ze.getName());
assertEquals(expected, ze.getNameSource());
@@ -160,7 +162,7 @@ public class ZipFileTest extends AbstractTest {
private void multiByteReadConsistentlyReturnsMinusOneAtEof(final File file) throws Exception {
final byte[] buf = new byte[2];
- try (ZipFile archive = new ZipFile(file)) {
+ try (ZipFile archive = ZipFile.builder().setFile(file).get()) {
final ZipArchiveEntry e = archive.getEntries().nextElement();
try (InputStream is = archive.getInputStream(e)) {
IOUtils.toByteArray(is);
@@ -179,8 +181,7 @@ public class ZipFileTest extends AbstractTest {
* The central directory has ZipFile and ZipUtil swapped so central directory order is different from entry data order.
*/
private void readOrderTest() throws Exception {
- final File archive = getFile("ordertest.zip");
- zf = new ZipFile(archive);
+ zf = ZipFile.builder().setFile(getFile("ordertest.zip")).get();
}
/**
@@ -195,7 +196,7 @@ public class ZipFileTest extends AbstractTest {
}
private void singleByteReadConsistentlyReturnsMinusOneAtEof(final File file) throws Exception {
- try (ZipFile archive = new ZipFile(file)) {
+ try (ZipFile archive = ZipFile.builder().setFile(file).get();) {
final ZipArchiveEntry e = archive.getEntries().nextElement();
try (InputStream is = archive.getInputStream(e)) {
IOUtils.toByteArray(is);
@@ -213,63 +214,49 @@ public class ZipFileTest extends AbstractTest {
@Test
public void testCDOrder() throws Exception {
readOrderTest();
- final ArrayList<ZipArchiveEntry> l = Collections.list(zf.getEntries());
- assertEntryName(l, 0, "AbstractUnicodeExtraField");
- assertEntryName(l, 1, "AsiExtraField");
- assertEntryName(l, 2, "ExtraFieldUtils");
- assertEntryName(l, 3, "FallbackZipEncoding");
- assertEntryName(l, 4, "GeneralPurposeBit");
- assertEntryName(l, 5, "JarMarker");
- assertEntryName(l, 6, "NioZipEncoding");
- assertEntryName(l, 7, "Simple8BitZipEncoding");
- assertEntryName(l, 8, "UnicodeCommentExtraField");
- assertEntryName(l, 9, "UnicodePathExtraField");
- assertEntryName(l, 10, "UnixStat");
- assertEntryName(l, 11, "UnparseableExtraFieldData");
- assertEntryName(l, 12, "UnrecognizedExtraField");
- assertEntryName(l, 13, "ZipArchiveEntry");
- assertEntryName(l, 14, "ZipArchiveInputStream");
- assertEntryName(l, 15, "ZipArchiveOutputStream");
- assertEntryName(l, 16, "ZipEncoding");
- assertEntryName(l, 17, "ZipEncodingHelper");
- assertEntryName(l, 18, "ZipExtraField");
- assertEntryName(l, 19, "ZipUtil");
- assertEntryName(l, 20, "ZipLong");
- assertEntryName(l, 21, "ZipShort");
- assertEntryName(l, 22, "ZipFile");
+ testCDOrderInMemory();
}
@Test
public void testCDOrderInMemory() throws Exception {
final byte[] data = readAllBytes("ordertest.zip");
-
+ zf = ZipFile.builder().setByteArray(data).setCharset(StandardCharsets.UTF_8).get();
+ testCDOrderInMemory(zf);
try (SeekableInMemoryByteChannel channel = new SeekableInMemoryByteChannel(data)) {
- zf = new ZipFile(channel, CharsetNames.UTF_8);
- final ArrayList<ZipArchiveEntry> l = Collections.list(zf.getEntries());
- assertEntryName(l, 0, "AbstractUnicodeExtraField");
- assertEntryName(l, 1, "AsiExtraField");
- assertEntryName(l, 2, "ExtraFieldUtils");
- assertEntryName(l, 3, "FallbackZipEncoding");
- assertEntryName(l, 4, "GeneralPurposeBit");
- assertEntryName(l, 5, "JarMarker");
- assertEntryName(l, 6, "NioZipEncoding");
- assertEntryName(l, 7, "Simple8BitZipEncoding");
- assertEntryName(l, 8, "UnicodeCommentExtraField");
- assertEntryName(l, 9, "UnicodePathExtraField");
- assertEntryName(l, 10, "UnixStat");
- assertEntryName(l, 11, "UnparseableExtraFieldData");
- assertEntryName(l, 12, "UnrecognizedExtraField");
- assertEntryName(l, 13, "ZipArchiveEntry");
- assertEntryName(l, 14, "ZipArchiveInputStream");
- assertEntryName(l, 15, "ZipArchiveOutputStream");
- assertEntryName(l, 16, "ZipEncoding");
- assertEntryName(l, 17, "ZipEncodingHelper");
- assertEntryName(l, 18, "ZipExtraField");
- assertEntryName(l, 19, "ZipUtil");
- assertEntryName(l, 20, "ZipLong");
- assertEntryName(l, 21, "ZipShort");
- assertEntryName(l, 22, "ZipFile");
+ zf = ZipFile.builder().setSeekableByteChannel(channel).setCharset(StandardCharsets.UTF_8).get();
+ testCDOrderInMemory(zf);
}
+ try (SeekableInMemoryByteChannel channel = new SeekableInMemoryByteChannel(data)) {
+ zf = new ZipFile(channel, CharsetNames.UTF_8);
+ testCDOrderInMemory(zf);
+ }
+ }
+
+ private void testCDOrderInMemory(final ZipFile zipFile) {
+ final ArrayList<ZipArchiveEntry> list = Collections.list(zipFile.getEntries());
+ assertEntryName(list, 0, "AbstractUnicodeExtraField");
+ assertEntryName(list, 1, "AsiExtraField");
+ assertEntryName(list, 2, "ExtraFieldUtils");
+ assertEntryName(list, 3, "FallbackZipEncoding");
+ assertEntryName(list, 4, "GeneralPurposeBit");
+ assertEntryName(list, 5, "JarMarker");
+ assertEntryName(list, 6, "NioZipEncoding");
+ assertEntryName(list, 7, "Simple8BitZipEncoding");
+ assertEntryName(list, 8, "UnicodeCommentExtraField");
+ assertEntryName(list, 9, "UnicodePathExtraField");
+ assertEntryName(list, 10, "UnixStat");
+ assertEntryName(list, 11, "UnparseableExtraFieldData");
+ assertEntryName(list, 12, "UnrecognizedExtraField");
+ assertEntryName(list, 13, "ZipArchiveEntry");
+ assertEntryName(list, 14, "ZipArchiveInputStream");
+ assertEntryName(list, 15, "ZipArchiveOutputStream");
+ assertEntryName(list, 16, "ZipEncoding");
+ assertEntryName(list, 17, "ZipEncodingHelper");
+ assertEntryName(list, 18, "ZipExtraField");
+ assertEntryName(list, 19, "ZipUtil");
+ assertEntryName(list, 20, "ZipLong");
+ assertEntryName(list, 21, "ZipShort");
+ assertEntryName(list, 22, "ZipFile");
}
@Test
@@ -309,7 +296,7 @@ public class ZipFileTest extends AbstractTest {
data = IOUtils.toByteArray(fis);
}
try (SeekableInMemoryByteChannel channel = new SeekableInMemoryByteChannel(data)) {
- zf = new ZipFile(channel, CharsetNames.UTF_8);
+ zf = ZipFile.builder().setSeekableByteChannel(channel).setCharset(StandardCharsets.UTF_8).get();
final Map<String, byte[]> content = new HashMap<>();
for (final ZipArchiveEntry entry : Collections.list(zf.getEntries())) {
@@ -359,7 +346,7 @@ public class ZipFileTest extends AbstractTest {
}
- try (ZipFile zf = new ZipFile(new SeekableInMemoryByteChannel(zipContent.toByteArray()))) {
+ try (ZipFile zf = ZipFile.builder().setByteArray(zipContent.toByteArray()).get()) {
final ZipArchiveEntry inflatedEntry = zf.getEntry("inflated.txt");
assertNotEquals(-1L, inflatedEntry.getLocalHeaderOffset());
assertNotEquals(-1L, inflatedEntry.getDataOffset());
@@ -444,7 +431,7 @@ public class ZipFileTest extends AbstractTest {
}
- try (ZipFile zf = new ZipFile(new SeekableInMemoryByteChannel(Arrays.copyOfRange(zipContent.array(), 0, (int) zipContent.size())))) {
+ try (ZipFile zf = ZipFile.builder().setByteArray(Arrays.copyOfRange(zipContent.array(), 0, (int) zipContent.size())).get()) {
final ZipArchiveEntry inflatedEntry = zf.getEntry("inflated.txt");
final ResourceAlignmentExtraField inflatedAlignmentEx = (ResourceAlignmentExtraField) inflatedEntry
.getExtraField(ResourceAlignmentExtraField.ID);
@@ -526,7 +513,7 @@ public class ZipFileTest extends AbstractTest {
public void testExtractFileLiesAcrossSplitZipSegmentsCreatedByWinrar() throws Exception {
final File lastFile = getFile("COMPRESS-477/split_zip_created_by_winrar/split_zip_created_by_winrar.zip");
try (SeekableByteChannel channel = ZipSplitReadOnlySeekableByteChannel.buildFromLastSplitSegment(lastFile)) {
- zf = new ZipFile(channel);
+ zf = ZipFile.builder().setSeekableByteChannel(channel).get();
// the compressed content of ZipArchiveInputStream.java lies between .z01 and .z02
final ZipArchiveEntry zipEntry = zf.getEntry("commons-compress/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java");
diff --git a/src/test/java/org/apache/commons/compress/archivers/zip/ZipMemoryFileSystemTest.java b/src/test/java/org/apache/commons/compress/archivers/zip/ZipMemoryFileSystemTest.java
index c561e5047..afe92df24 100644
--- a/src/test/java/org/apache/commons/compress/archivers/zip/ZipMemoryFileSystemTest.java
+++ b/src/test/java/org/apache/commons/compress/archivers/zip/ZipMemoryFileSystemTest.java
@@ -52,7 +52,7 @@ import org.apache.commons.compress.archivers.ArchiveOutputStream;
import org.apache.commons.compress.archivers.ArchiveStreamFactory;
import org.apache.commons.compress.parallel.InputStreamSupplier;
import org.apache.commons.compress.utils.CharsetNames;
-import org.apache.commons.compress.utils.IOUtils;
+import org.apache.commons.io.IOUtils;
import org.apache.commons.io.file.PathUtils;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
@@ -171,7 +171,7 @@ public class ZipMemoryFileSystemTest {
}
}
- try (ZipFile zf = new ZipFile(target.toFile())) {
+ try (ZipFile zf = ZipFile.builder().setPath(target).get()) {
final ZipArchiveEntry b_entry = zf.getEntries("b.txt").iterator().next();
assertEquals(8, b_entry.getSize());
try (InputStream inputStream = zf.getInputStream(b_entry)) {
@@ -212,6 +212,19 @@ public class ZipMemoryFileSystemTest {
scatterZipOutputStream.writeTo(outputStream);
}
}
+ try (ZipFile zf = ZipFile.builder().setPath(target).get()) {
+ final ZipArchiveEntry b_entry = zf.getEntries("b.txt").iterator().next();
+ assertEquals(8, b_entry.getSize());
+ try (InputStream inputStream = zf.getInputStream(b_entry)) {
+ assertArrayEquals(B_PAYLOAD, IOUtils.toByteArray(inputStream));
+ }
+
+ final ZipArchiveEntry a_entry = zf.getEntries("a.txt").iterator().next();
+ assertEquals(4, a_entry.getSize());
+ try (InputStream inputStream = zf.getInputStream(a_entry)) {
+ assertArrayEquals(A_PAYLOAD, IOUtils.toByteArray(inputStream));
+ }
+ }
try (ZipFile zf = new ZipFile(Files.newByteChannel(target, StandardOpenOption.READ), target.getFileName().toString(), CharsetNames.UTF_8, true)) {
final ZipArchiveEntry b_entry = zf.getEntries("b.txt").iterator().next();
@@ -226,6 +239,22 @@ public class ZipMemoryFileSystemTest {
assertArrayEquals(A_PAYLOAD, IOUtils.toByteArray(inputStream));
}
}
+
+ try (ZipFile zf = new ZipFile(Files.newByteChannel(target, StandardOpenOption.READ), target.getFileName().toString(), CharsetNames.UTF_8, true,
+ false)) {
+ final ZipArchiveEntry b_entry = zf.getEntries("b.txt").iterator().next();
+ assertEquals(8, b_entry.getSize());
+ try (InputStream inputStream = zf.getInputStream(b_entry)) {
+ assertArrayEquals(B_PAYLOAD, IOUtils.toByteArray(inputStream));
+ }
+
+ final ZipArchiveEntry a_entry = zf.getEntries("a.txt").iterator().next();
+ assertEquals(4, a_entry.getSize());
+ try (InputStream inputStream = zf.getInputStream(a_entry)) {
+ assertArrayEquals(A_PAYLOAD, IOUtils.toByteArray(inputStream));
+ }
+ }
+
}
}
@@ -253,7 +282,7 @@ public class ZipMemoryFileSystemTest {
}
}
- try (ZipFile zf = new ZipFile(target.toFile())) {
+ try (ZipFile zf = ZipFile.builder().setPath(target).get()) {
final ZipArchiveEntry b_entry = zf.getEntries("b.txt").iterator().next();
assertEquals(8, b_entry.getSize());
try (InputStream inputStream = zf.getInputStream(b_entry)) {
diff --git a/src/test/java/org/apache/commons/compress/changes/ChangeSetRawTypesTest.java b/src/test/java/org/apache/commons/compress/changes/ChangeSetRawTypesTest.java
index daf7a83e7..2de6668dd 100644
--- a/src/test/java/org/apache/commons/compress/changes/ChangeSetRawTypesTest.java
+++ b/src/test/java/org/apache/commons/compress/changes/ChangeSetRawTypesTest.java
@@ -666,7 +666,7 @@ public final class ChangeSetRawTypesTest extends AbstractTest {
final String archiverName = "zip";
final Path input = createArchive(archiverName);
final Path result = Files.createTempFile("test", "." + archiverName);
- try (ZipFile archiveInputStream = new ZipFile(input);
+ try (ZipFile archiveInputStream = ZipFile.builder().setPath(input).get();
OutputStream newOutputStream = Files.newOutputStream(result);
ArchiveOutputStream archiveOutputStream = factory.createArchiveOutputStream(archiverName, newOutputStream);
InputStream csInputStream = Files.newInputStream(getPath("test.txt"))) {
diff --git a/src/test/java/org/apache/commons/compress/changes/ChangeSetSafeTypesTest.java b/src/test/java/org/apache/commons/compress/changes/ChangeSetSafeTypesTest.java
index 2f6d847d2..dfbb97545 100644
--- a/src/test/java/org/apache/commons/compress/changes/ChangeSetSafeTypesTest.java
+++ b/src/test/java/org/apache/commons/compress/changes/ChangeSetSafeTypesTest.java
@@ -673,7 +673,7 @@ public final class ChangeSetSafeTypesTest<I extends ArchiveInputStream<E>, O ext
final Path input = createArchive(archiverName);
final File result = createTempFile("test", "." + archiverName);
final File file1 = getFile("test.txt");
- try (ZipFile ais = new ZipFile(input);
+ try (ZipFile ais = ZipFile.builder().setPath(input).get();
OutputStream outputStream = Files.newOutputStream(result.toPath());
ArchiveOutputStream<ZipArchiveEntry> out = createArchiveOutputStream(archiverName, outputStream);
InputStream csInputStream = Files.newInputStream(file1.toPath())) {
diff --git a/src/test/java/org/apache/commons/compress/compressors/deflate64/Deflate64BugsTest.java b/src/test/java/org/apache/commons/compress/compressors/deflate64/Deflate64BugsTest.java
index 0db9d827b..bb75986a4 100644
--- a/src/test/java/org/apache/commons/compress/compressors/deflate64/Deflate64BugsTest.java
+++ b/src/test/java/org/apache/commons/compress/compressors/deflate64/Deflate64BugsTest.java
@@ -29,7 +29,7 @@ public class Deflate64BugsTest {
@Test
public void testReadBeyondMemoryException() throws Exception {
- try (ZipFile zfile = new ZipFile(getFile("COMPRESS-380/COMPRESS-380-readbeyondmemory.zip"))) {
+ try (ZipFile zfile = ZipFile.builder().setFile(getFile("COMPRESS-380/COMPRESS-380-readbeyondmemory.zip")).get()) {
final Enumeration<ZipArchiveEntry> entries = zfile.getEntries();
while (entries.hasMoreElements()) {
final ZipArchiveEntry e = entries.nextElement();
diff --git a/src/test/java/org/apache/commons/compress/compressors/snappy/FramedSnappyCompressorInputStreamTest.java b/src/test/java/org/apache/commons/compress/compressors/snappy/FramedSnappyCompressorInputStreamTest.java
index 54d288e5c..94f173061 100644
--- a/src/test/java/org/apache/commons/compress/compressors/snappy/FramedSnappyCompressorInputStreamTest.java
+++ b/src/test/java/org/apache/commons/compress/compressors/snappy/FramedSnappyCompressorInputStreamTest.java
@@ -113,7 +113,7 @@ public final class FramedSnappyCompressorInputStreamTest extends AbstractTest {
@Test
public void testReadIWAFile() throws Exception {
- try (ZipFile zip = new ZipFile(getFile("testNumbersNew.numbers"))) {
+ try (ZipFile zip = ZipFile.builder().setFile(getFile("testNumbersNew.numbers")).get()) {
try (InputStream is = zip.getInputStream(zip.getEntry("Index/Document.iwa"))) {
try (FramedSnappyCompressorInputStream in = new FramedSnappyCompressorInputStream(is, FramedSnappyDialect.IWORK_ARCHIVE)) {
Files.copy(in, newTempFile("snappyIWATest.raw").toPath());