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
commit fee64bc2cdd017fdb756fc9cb0cd13521503957a Author: Gary Gregory <garydgreg...@gmail.com> AuthorDate: Sat Aug 8 15:54:58 2020 -0400 Add SevenZOutputFile.write(Path, OpenOption...). --- src/changes/changes.xml | 3 +++ .../compress/archivers/sevenz/SevenZOutputFile.java | 17 ++++++++++++++++- .../archivers/sevenz/SevenZOutputFileTest.java | 20 ++++++++++++++++++++ 3 files changed, 39 insertions(+), 1 deletion(-) diff --git a/src/changes/changes.xml b/src/changes/changes.xml index 58d23c5..5eefcd9 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -133,6 +133,9 @@ The <action> type attribute can be add,update,fix,remove. <action type="update" date="2020-08-08" due-to="Gary Gregory" dev="ggregory"> Add SevenZOutputFile.write(InputStream). </action> + <action type="update" date="2020-08-08" due-to="Gary Gregory" dev="ggregory"> + Add SevenZOutputFile.write(Path, OpenOption...). + </action> <action type="update" date="2020-07-23" due-to="Dependabot" dev="ggregory"> Update GitHub actions/checkout from v1 to v2.3.1 #114. </action> diff --git a/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZOutputFile.java b/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZOutputFile.java index 28a7e6c..fe9db09 100644 --- a/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZOutputFile.java +++ b/src/main/java/org/apache/commons/compress/archivers/sevenz/SevenZOutputFile.java @@ -31,6 +31,8 @@ import java.nio.ByteOrder; 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.ArrayList; import java.util.BitSet; @@ -38,8 +40,8 @@ import java.util.Collections; import java.util.Date; import java.util.EnumSet; import java.util.HashMap; -import java.util.List; import java.util.LinkedList; +import java.util.List; import java.util.Map; import java.util.zip.CRC32; @@ -259,6 +261,19 @@ public class SevenZOutputFile implements Closeable { } /** + * Writes all of the given input stream to the current archive entry. + * @param path the data source. + * @param options options specifying how the file is opened. + * @throws IOException if an I/O error occurs. + * @since 1.21 + */ + public void write(final Path path, OpenOption... options) throws IOException { + try (InputStream in = new BufferedInputStream(Files.newInputStream(path, options))) { + write(in); + } + } + + /** * Finishes the addition of entries to this archive, without closing it. * * @throws IOException if archive is already closed. diff --git a/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZOutputFileTest.java b/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZOutputFileTest.java index 638d9d2..bebc26b 100644 --- a/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZOutputFileTest.java +++ b/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZOutputFileTest.java @@ -23,6 +23,8 @@ import org.junit.Test; import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; import java.util.Arrays; import java.util.ArrayList; import java.util.Calendar; @@ -102,6 +104,14 @@ public class SevenZOutputFileTest extends AbstractTestCase { outArchive.closeArchiveEntry(); entry = new SevenZArchiveEntry(); + entry.setName("foo/bar/test.txt"); + entry.setCreationDate(creationDate); + entry.setAccessDate(accessDate); + outArchive.putArchiveEntry(entry); + outArchive.write(Paths.get("src/test/resources/test.txt")); + outArchive.closeArchiveEntry(); + + entry = new SevenZArchiveEntry(); entry.setName("xyzzy"); outArchive.putArchiveEntry(entry); outArchive.write(0); @@ -173,6 +183,16 @@ public class SevenZOutputFileTest extends AbstractTestCase { entry = archive.getNextEntry(); assert (entry != null); + assertEquals("foo/bar/test.txt", entry.getName()); + assertFalse(entry.isDirectory()); + assertFalse(entry.isAntiItem()); + assertEquals(Files.size(Paths.get("src/test/resources/test.txt")), entry.getSize()); + assertFalse(entry.getHasLastModifiedDate()); + assertEquals(accessDate, entry.getAccessDate()); + assertEquals(creationDate, entry.getCreationDate()); + + entry = archive.getNextEntry(); + assert (entry != null); assertEquals("xyzzy", entry.getName()); assertEquals(1, entry.getSize()); assertFalse(entry.getHasAccessDate());