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

Reply via email to