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());