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 2022/12/11 06:34:11 UTC
[commons-compress] 01/02: Use try-with-resources
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 11cf79432a8ae9c85400def9d28a1b042ed7316d
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Sun Dec 11 01:29:20 2022 -0500
Use try-with-resources
---
.../archivers/tar/TarArchiveInputStreamTest.java | 93 ++---
.../archivers/tar/TarArchiveOutputStreamTest.java | 431 ++++++++++-----------
.../commons/compress/archivers/tar/TarLister.java | 20 +-
3 files changed, 251 insertions(+), 293 deletions(-)
diff --git a/src/test/java/org/apache/commons/compress/archivers/tar/TarArchiveInputStreamTest.java b/src/test/java/org/apache/commons/compress/archivers/tar/TarArchiveInputStreamTest.java
index 7120ea5c..0c07dd0a 100644
--- a/src/test/java/org/apache/commons/compress/archivers/tar/TarArchiveInputStreamTest.java
+++ b/src/test/java/org/apache/commons/compress/archivers/tar/TarArchiveInputStreamTest.java
@@ -105,22 +105,20 @@ public class TarArchiveInputStreamTest extends AbstractTestCase {
final String name = "1234567890123456789012345678901234567890123456789"
+ "01234567890123456789012345678901234567890123456789"
+ "01234567890\u00e4";
- final TarArchiveOutputStream tos =
- new TarArchiveOutputStream(bos, encoding);
- tos.setLongFileMode(TarArchiveOutputStream.LONGFILE_GNU);
- TarArchiveEntry t = new TarArchiveEntry(name);
- t.setSize(1);
- tos.putArchiveEntry(t);
- tos.write(30);
- tos.closeArchiveEntry();
- tos.close();
+ try (TarArchiveOutputStream tos = new TarArchiveOutputStream(bos, encoding)) {
+ tos.setLongFileMode(TarArchiveOutputStream.LONGFILE_GNU);
+ TarArchiveEntry t = new TarArchiveEntry(name);
+ t.setSize(1);
+ tos.putArchiveEntry(t);
+ tos.write(30);
+ tos.closeArchiveEntry();
+ }
final byte[] data = bos.toByteArray();
final ByteArrayInputStream bis = new ByteArrayInputStream(data);
- final TarArchiveInputStream tis =
- new TarArchiveInputStream(bis, encoding);
- t = tis.getNextTarEntry();
- assertEquals(name, t.getName());
- tis.close();
+ try (TarArchiveInputStream tis = new TarArchiveInputStream(bis, encoding)) {
+ TarArchiveEntry t = tis.getNextTarEntry();
+ assertEquals(name, t.getName());
+ }
}
/**
@@ -128,35 +126,31 @@ public class TarArchiveInputStreamTest extends AbstractTestCase {
*/
@Test
public void shouldConsumeArchiveCompletely() throws Exception {
- final InputStream is = TarArchiveInputStreamTest.class
- .getResourceAsStream("/archive_with_trailer.tar");
- final TarArchiveInputStream tar = new TarArchiveInputStream(is);
- while (tar.getNextTarEntry() != null) {
- // just consume the archive
+ try (InputStream is = TarArchiveInputStreamTest.class.getResourceAsStream("/archive_with_trailer.tar");
+ TarArchiveInputStream tar = new TarArchiveInputStream(is)) {
+ while (tar.getNextTarEntry() != null) {
+ // just consume the archive
+ }
+ final byte[] expected = { 'H', 'e', 'l', 'l', 'o', ',', ' ', 'w', 'o', 'r', 'l', 'd', '!', '\n' };
+ final byte[] actual = new byte[expected.length];
+ is.read(actual);
+ assertArrayEquals(expected, actual);
}
- final byte[] expected = {
- 'H', 'e', 'l', 'l', 'o', ',', ' ', 'w', 'o', 'r', 'l', 'd', '!', '\n'
- };
- final byte[] actual = new byte[expected.length];
- is.read(actual);
- assertArrayEquals(expected, actual);
- tar.close();
}
@Test
public void readsArchiveCompletely_COMPRESS245() {
- try (InputStream is = TarArchiveInputStreamTest.class
- .getResourceAsStream("/COMPRESS-245.tar.gz")) {
+ try (InputStream is = TarArchiveInputStreamTest.class.getResourceAsStream("/COMPRESS-245.tar.gz")) {
final InputStream gin = new GZIPInputStream(is);
- final TarArchiveInputStream tar = new TarArchiveInputStream(gin);
- int count = 0;
- TarArchiveEntry entry = tar.getNextTarEntry();
- while (entry != null) {
- count++;
- entry = tar.getNextTarEntry();
+ try (TarArchiveInputStream tar = new TarArchiveInputStream(gin)) {
+ int count = 0;
+ TarArchiveEntry entry = tar.getNextTarEntry();
+ while (entry != null) {
+ count++;
+ entry = tar.getNextTarEntry();
+ }
+ assertEquals(31, count);
}
- assertEquals(31, count);
- tar.close();
} catch (final IOException e) {
fail("COMPRESS-245: " + e.getMessage());
}
@@ -185,22 +179,21 @@ public class TarArchiveInputStreamTest extends AbstractTestCase {
@Test
public void shouldReadBigGid() throws Exception {
final ByteArrayOutputStream bos = new ByteArrayOutputStream();
- final TarArchiveOutputStream tos = new TarArchiveOutputStream(bos);
- tos.setBigNumberMode(TarArchiveOutputStream.BIGNUMBER_POSIX);
- TarArchiveEntry t = new TarArchiveEntry("name");
- t.setGroupId(4294967294L);
- t.setSize(1);
- tos.putArchiveEntry(t);
- tos.write(30);
- tos.closeArchiveEntry();
- tos.close();
+ try (TarArchiveOutputStream tos = new TarArchiveOutputStream(bos)) {
+ tos.setBigNumberMode(TarArchiveOutputStream.BIGNUMBER_POSIX);
+ TarArchiveEntry t = new TarArchiveEntry("name");
+ t.setGroupId(4294967294L);
+ t.setSize(1);
+ tos.putArchiveEntry(t);
+ tos.write(30);
+ tos.closeArchiveEntry();
+ }
final byte[] data = bos.toByteArray();
final ByteArrayInputStream bis = new ByteArrayInputStream(data);
- final TarArchiveInputStream tis =
- new TarArchiveInputStream(bis);
- t = tis.getNextTarEntry();
- assertEquals(4294967294L, t.getLongGroupId());
- tis.close();
+ try (final TarArchiveInputStream tis = new TarArchiveInputStream(bis)) {
+ TarArchiveEntry t = tis.getNextTarEntry();
+ assertEquals(4294967294L, t.getLongGroupId());
+ }
}
/**
diff --git a/src/test/java/org/apache/commons/compress/archivers/tar/TarArchiveOutputStreamTest.java b/src/test/java/org/apache/commons/compress/archivers/tar/TarArchiveOutputStreamTest.java
index 6a46becb..4beeb258 100644
--- a/src/test/java/org/apache/commons/compress/archivers/tar/TarArchiveOutputStreamTest.java
+++ b/src/test/java/org/apache/commons/compress/archivers/tar/TarArchiveOutputStreamTest.java
@@ -66,15 +66,15 @@ public class TarArchiveOutputStreamTest extends AbstractTestCase {
final TarArchiveEntry sEntry = new TarArchiveEntry(file1, file1.getName());
tarOut.putArchiveEntry(sEntry);
- final InputStream in = Files.newInputStream(file1.toPath());
- final byte[] buf = new byte[8192];
+ try (final InputStream in = Files.newInputStream(file1.toPath())) {
+ final byte[] buf = new byte[8192];
- int read = 0;
- while ((read = in.read(buf)) > 0) {
- tarOut.write(buf, 0, read);
- }
+ int read = 0;
+ while ((read = in.read(buf)) > 0) {
+ tarOut.write(buf, 0, read);
+ }
- in.close();
+ }
tarOut.closeArchiveEntry();
tarOut.close();
@@ -102,8 +102,9 @@ public class TarArchiveOutputStreamTest extends AbstractTestCase {
final TarArchiveEntry t = new TarArchiveEntry("foo");
t.setSize(0100000000000L);
final ByteArrayOutputStream bos = new ByteArrayOutputStream();
- final TarArchiveOutputStream tos = new TarArchiveOutputStream(bos);
- assertThrows(IllegalArgumentException.class, () -> tos.putArchiveEntry(t));
+ try (TarArchiveOutputStream tos = new TarArchiveOutputStream(bos)) {
+ assertThrows(IllegalArgumentException.class, () -> tos.putArchiveEntry(t));
+ }
}
@Test
@@ -117,16 +118,11 @@ public class TarArchiveOutputStreamTest extends AbstractTestCase {
// make sure header is written to byte array
tos.write(new byte[10 * 1024]);
final byte[] data = bos.toByteArray();
- assertEquals(0x80,
- data[TarConstants.NAMELEN
- + TarConstants.MODELEN
- + TarConstants.UIDLEN
- + TarConstants.GIDLEN] & 0x80);
- final TarArchiveInputStream tin =
- new TarArchiveInputStream(new ByteArrayInputStream(data));
- final TarArchiveEntry e = tin.getNextTarEntry();
- assertEquals(0100000000000L, e.getSize());
- tin.close();
+ assertEquals(0x80, data[TarConstants.NAMELEN + TarConstants.MODELEN + TarConstants.UIDLEN + TarConstants.GIDLEN] & 0x80);
+ try (TarArchiveInputStream tin = new TarArchiveInputStream(new ByteArrayInputStream(data))) {
+ final TarArchiveEntry e = tin.getNextTarEntry();
+ assertEquals(0100000000000L, e.getSize());
+ }
// generates IOE because of unclosed entries.
// However we don't really want to create such large entries.
closeQuietly(tos);
@@ -150,11 +146,10 @@ public class TarArchiveOutputStreamTest extends AbstractTestCase {
+ TarConstants.UIDLEN
+ TarConstants.GIDLEN, 12,
UTF_8));
- final TarArchiveInputStream tin =
- new TarArchiveInputStream(new ByteArrayInputStream(data));
- final TarArchiveEntry e = tin.getNextTarEntry();
- assertEquals(0100000000000L, e.getSize());
- tin.close();
+ try (TarArchiveInputStream tin = new TarArchiveInputStream(new ByteArrayInputStream(data))) {
+ final TarArchiveEntry e = tin.getNextTarEntry();
+ assertEquals(0100000000000L, e.getSize());
+ }
// generates IOE because of unclosed entries.
// However we don't really want to create such large entries.
closeQuietly(tos);
@@ -214,43 +209,41 @@ public class TarArchiveOutputStreamTest extends AbstractTestCase {
private byte[] writePaxHeader(final Map<String, String> m) throws Exception {
final ByteArrayOutputStream bos = new ByteArrayOutputStream();
- final TarArchiveOutputStream tos = new TarArchiveOutputStream(bos, "ASCII");
- tos.writePaxHeaders(new TarArchiveEntry("x"), "foo", m);
+ try (TarArchiveOutputStream tos = new TarArchiveOutputStream(bos, "ASCII")) {
+ tos.writePaxHeaders(new TarArchiveEntry("x"), "foo", m);
- // add a dummy entry so data gets written
- final TarArchiveEntry t = new TarArchiveEntry("foo");
- t.setSize(10 * 1024);
- tos.putArchiveEntry(t);
- tos.write(new byte[10 * 1024]);
- tos.closeArchiveEntry();
- tos.close();
+ // add a dummy entry so data gets written
+ final TarArchiveEntry t = new TarArchiveEntry("foo");
+ t.setSize(10 * 1024);
+ tos.putArchiveEntry(t);
+ tos.write(new byte[10 * 1024]);
+ tos.closeArchiveEntry();
+ }
return bos.toByteArray();
}
@Test
public void testWriteLongFileNamePosixMode() throws Exception {
- final String n = "01234567890123456789012345678901234567890123456789"
- + "01234567890123456789012345678901234567890123456789"
- + "01234567890123456789012345678901234567890123456789";
- final TarArchiveEntry t =
- new TarArchiveEntry(n);
+ // @formatter:off
+ final String n = "01234567890123456789012345678901234567890123456789"
+ + "01234567890123456789012345678901234567890123456789"
+ + "01234567890123456789012345678901234567890123456789";
+ // @formatter:on
+ final TarArchiveEntry t = new TarArchiveEntry(n);
t.setSize(10 * 1024);
final ByteArrayOutputStream bos = new ByteArrayOutputStream();
- final TarArchiveOutputStream tos = new TarArchiveOutputStream(bos, "ASCII");
- tos.setLongFileMode(TarArchiveOutputStream.LONGFILE_POSIX);
- tos.putArchiveEntry(t);
- tos.write(new byte[10 * 1024]);
- tos.closeArchiveEntry();
- final byte[] data = bos.toByteArray();
- assertEquals("160 path=" + n + "\n",
- new String(data, 512, 160, UTF_8));
- final TarArchiveInputStream tin =
- new TarArchiveInputStream(new ByteArrayInputStream(data));
- final TarArchiveEntry e = tin.getNextTarEntry();
- assertEquals(n, e.getName());
- tin.close();
- tos.close();
+ try (TarArchiveOutputStream tos = new TarArchiveOutputStream(bos, "ASCII")) {
+ tos.setLongFileMode(TarArchiveOutputStream.LONGFILE_POSIX);
+ tos.putArchiveEntry(t);
+ tos.write(new byte[10 * 1024]);
+ tos.closeArchiveEntry();
+ final byte[] data = bos.toByteArray();
+ assertEquals("160 path=" + n + "\n", new String(data, 512, 160, UTF_8));
+ try (TarArchiveInputStream tin = new TarArchiveInputStream(new ByteArrayInputStream(data))) {
+ assertEquals(n, tin.getNextTarEntry().getName());
+ }
+ }
}
@Test
@@ -271,14 +264,13 @@ public class TarArchiveOutputStreamTest extends AbstractTestCase {
+ TarConstants.UIDLEN
+ TarConstants.GIDLEN
+ TarConstants.SIZELEN]);
- final TarArchiveInputStream tin =
- new TarArchiveInputStream(new ByteArrayInputStream(data));
- final TarArchiveEntry e = tin.getNextTarEntry();
- final Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
- cal.set(1969, 11, 31, 23, 59, 59);
- cal.set(Calendar.MILLISECOND, 0);
- assertEquals(cal.getTime(), e.getLastModifiedDate());
- tin.close();
+ try (TarArchiveInputStream tin = new TarArchiveInputStream(new ByteArrayInputStream(data))) {
+ final TarArchiveEntry e = tin.getNextTarEntry();
+ final Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
+ cal.set(1969, 11, 31, 23, 59, 59);
+ cal.set(Calendar.MILLISECOND, 0);
+ assertEquals(cal.getTime(), e.getLastModifiedDate());
+ }
// generates IOE because of unclosed entries.
// However we don't really want to create such large entries.
closeQuietly(tos);
@@ -304,14 +296,13 @@ public class TarArchiveOutputStreamTest extends AbstractTestCase {
+ TarConstants.GIDLEN
+ TarConstants.SIZELEN, 12,
UTF_8));
- final TarArchiveInputStream tin =
- new TarArchiveInputStream(new ByteArrayInputStream(data));
- final TarArchiveEntry e = tin.getNextTarEntry();
- final Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
- cal.set(1969, 11, 31, 23, 59, 59);
- cal.set(Calendar.MILLISECOND, 0);
- assertEquals(cal.getTime(), e.getLastModifiedDate());
- tin.close();
+ try (TarArchiveInputStream tin = new TarArchiveInputStream(new ByteArrayInputStream(data))) {
+ final TarArchiveEntry e = tin.getNextTarEntry();
+ final Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
+ cal.set(1969, 11, 31, 23, 59, 59);
+ cal.set(Calendar.MILLISECOND, 0);
+ assertEquals(cal.getTime(), e.getLastModifiedDate());
+ }
// generates IOE because of unclosed entries.
// However we don't really want to create such large entries.
closeQuietly(tos);
@@ -322,14 +313,9 @@ public class TarArchiveOutputStreamTest extends AbstractTestCase {
final TarArchiveEntry t = new TarArchiveEntry("foo");
t.setSize(Integer.MAX_VALUE);
t.setModTime(-1000);
- final TarArchiveOutputStream tos =
- new TarArchiveOutputStream(new ByteArrayOutputStream());
- try {
- tos.putArchiveEntry(t);
- fail("Should have generated RuntimeException");
- } catch (final RuntimeException expected) {
+ try (TarArchiveOutputStream tos = new TarArchiveOutputStream(new ByteArrayOutputStream())) {
+ assertThrows(RuntimeException.class, () -> tos.putArchiveEntry(t));
}
- tos.close();
}
@Test
@@ -338,20 +324,18 @@ public class TarArchiveOutputStreamTest extends AbstractTestCase {
final TarArchiveEntry t = new TarArchiveEntry(n);
t.setSize(10 * 1024);
final ByteArrayOutputStream bos = new ByteArrayOutputStream();
- final TarArchiveOutputStream tos = new TarArchiveOutputStream(bos);
- tos.setAddPaxHeadersForNonAsciiNames(true);
- tos.putArchiveEntry(t);
- tos.write(new byte[10 * 1024]);
- tos.closeArchiveEntry();
- tos.close();
+ try (TarArchiveOutputStream tos = new TarArchiveOutputStream(bos)) {
+ tos.setAddPaxHeadersForNonAsciiNames(true);
+ tos.putArchiveEntry(t);
+ tos.write(new byte[10 * 1024]);
+ tos.closeArchiveEntry();
+ }
final byte[] data = bos.toByteArray();
- assertEquals("11 path=" + n + "\n",
- new String(data, 512, 11, UTF_8));
- final TarArchiveInputStream tin =
- new TarArchiveInputStream(new ByteArrayInputStream(data));
- final TarArchiveEntry e = tin.getNextTarEntry();
- assertEquals(n, e.getName());
- tin.close();
+ assertEquals("11 path=" + n + "\n", new String(data, 512, 11, UTF_8));
+ try (TarArchiveInputStream tin = new TarArchiveInputStream(new ByteArrayInputStream(data))) {
+ final TarArchiveEntry e = tin.getNextTarEntry();
+ assertEquals(n, e.getName());
+ }
}
@Test
@@ -361,20 +345,18 @@ public class TarArchiveOutputStreamTest extends AbstractTestCase {
t.setSize(10 * 1024);
t.setLinkName(n);
final ByteArrayOutputStream bos = new ByteArrayOutputStream();
- final TarArchiveOutputStream tos = new TarArchiveOutputStream(bos);
- tos.setAddPaxHeadersForNonAsciiNames(true);
- tos.putArchiveEntry(t);
- tos.write(new byte[10 * 1024]);
- tos.closeArchiveEntry();
- tos.close();
+ try (TarArchiveOutputStream tos = new TarArchiveOutputStream(bos)) {
+ tos.setAddPaxHeadersForNonAsciiNames(true);
+ tos.putArchiveEntry(t);
+ tos.write(new byte[10 * 1024]);
+ tos.closeArchiveEntry();
+ }
final byte[] data = bos.toByteArray();
- assertEquals("15 linkpath=" + n + "\n",
- new String(data, 512, 15, UTF_8));
- final TarArchiveInputStream tin =
- new TarArchiveInputStream(new ByteArrayInputStream(data));
- final TarArchiveEntry e = tin.getNextTarEntry();
- assertEquals(n, e.getLinkName());
- tin.close();
+ assertEquals("15 linkpath=" + n + "\n", new String(data, 512, 15, UTF_8));
+ try (TarArchiveInputStream tin = new TarArchiveInputStream(new ByteArrayInputStream(data))) {
+ final TarArchiveEntry e = tin.getNextTarEntry();
+ assertEquals(n, e.getLinkName());
+ }
}
/**
@@ -394,24 +376,21 @@ public class TarArchiveOutputStreamTest extends AbstractTestCase {
}
private void testRoundtripWith67CharFileName(final int mode) throws Exception {
- final String n = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- + "AAAAAAA";
+ final String n = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
assertEquals(67, n.length());
final TarArchiveEntry t = new TarArchiveEntry(n);
t.setSize(10 * 1024);
final ByteArrayOutputStream bos = new ByteArrayOutputStream();
- final TarArchiveOutputStream tos = new TarArchiveOutputStream(bos, "ASCII");
- tos.setLongFileMode(mode);
- tos.putArchiveEntry(t);
- tos.write(new byte[10 * 1024]);
- tos.closeArchiveEntry();
- tos.close();
+ try (TarArchiveOutputStream tos = new TarArchiveOutputStream(bos, "ASCII")) {
+ tos.setLongFileMode(mode);
+ tos.putArchiveEntry(t);
+ tos.write(new byte[10 * 1024]);
+ tos.closeArchiveEntry();
+ }
final byte[] data = bos.toByteArray();
- final TarArchiveInputStream tin =
- new TarArchiveInputStream(new ByteArrayInputStream(data));
- final TarArchiveEntry e = tin.getNextTarEntry();
- assertEquals(n, e.getName());
- tin.close();
+ try (TarArchiveInputStream tin = new TarArchiveInputStream(new ByteArrayInputStream(data))) {
+ assertEquals(n, tin.getNextTarEntry().getName());
+ }
}
@Test
@@ -423,11 +402,11 @@ public class TarArchiveOutputStreamTest extends AbstractTestCase {
try {
final TarArchiveEntry t = new TarArchiveEntry(n);
final ByteArrayOutputStream bos = new ByteArrayOutputStream();
- final TarArchiveOutputStream tos = new TarArchiveOutputStream(bos, "ASCII");
- tos.setLongFileMode(TarArchiveOutputStream.LONGFILE_ERROR);
- tos.putArchiveEntry(t);
- tos.closeArchiveEntry();
- tos.close();
+ try (TarArchiveOutputStream tos = new TarArchiveOutputStream(bos, "ASCII")) {
+ tos.setLongFileMode(TarArchiveOutputStream.LONGFILE_ERROR);
+ tos.putArchiveEntry(t);
+ tos.closeArchiveEntry();
+ }
fail("Truncated name didn't throw an exception");
} catch (final RuntimeException e) {
@@ -442,18 +421,17 @@ public class TarArchiveOutputStreamTest extends AbstractTestCase {
+ "01234567890123456789012345678901234567890123456789/";
final TarArchiveEntry t = new TarArchiveEntry(n);
final ByteArrayOutputStream bos = new ByteArrayOutputStream();
- final TarArchiveOutputStream tos = new TarArchiveOutputStream(bos, "ASCII");
- tos.setLongFileMode(TarArchiveOutputStream.LONGFILE_TRUNCATE);
- tos.putArchiveEntry(t);
- tos.closeArchiveEntry();
- tos.close();
+ try (TarArchiveOutputStream tos = new TarArchiveOutputStream(bos, "ASCII")) {
+ tos.setLongFileMode(TarArchiveOutputStream.LONGFILE_TRUNCATE);
+ tos.putArchiveEntry(t);
+ tos.closeArchiveEntry();
+ }
final byte[] data = bos.toByteArray();
- final TarArchiveInputStream tin =
- new TarArchiveInputStream(new ByteArrayInputStream(data));
- final TarArchiveEntry e = tin.getNextTarEntry();
- assertEquals("Entry name", n.substring(0, TarConstants.NAMELEN) + "/", e.getName());
- assertTrue("The entry is not a directory", e.isDirectory());
- tin.close();
+ try (TarArchiveInputStream tin = new TarArchiveInputStream(new ByteArrayInputStream(data))) {
+ final TarArchiveEntry e = tin.getNextTarEntry();
+ assertEquals("Entry name", n.substring(0, TarConstants.NAMELEN) + "/", e.getName());
+ assertTrue("The entry is not a directory", e.isDirectory());
+ }
}
/**
@@ -478,18 +456,17 @@ public class TarArchiveOutputStreamTest extends AbstractTestCase {
+ "01234567890123456789012345678901234567890123456789/";
final TarArchiveEntry t = new TarArchiveEntry(n);
final ByteArrayOutputStream bos = new ByteArrayOutputStream();
- final TarArchiveOutputStream tos = new TarArchiveOutputStream(bos, "ASCII");
- tos.setLongFileMode(mode);
- tos.putArchiveEntry(t);
- tos.closeArchiveEntry();
- tos.close();
+ try (TarArchiveOutputStream tos = new TarArchiveOutputStream(bos, "ASCII")) {
+ tos.setLongFileMode(mode);
+ tos.putArchiveEntry(t);
+ tos.closeArchiveEntry();
+ }
final byte[] data = bos.toByteArray();
- final TarArchiveInputStream tin =
- new TarArchiveInputStream(new ByteArrayInputStream(data));
- final TarArchiveEntry e = tin.getNextTarEntry();
- assertEquals(n, e.getName());
- assertTrue(e.isDirectory());
- tin.close();
+ try (TarArchiveInputStream tin = new TarArchiveInputStream(new ByteArrayInputStream(data))) {
+ final TarArchiveEntry e = tin.getNextTarEntry();
+ assertEquals(n, e.getName());
+ assertTrue(e.isDirectory());
+ }
}
/**
@@ -500,18 +477,17 @@ public class TarArchiveOutputStreamTest extends AbstractTestCase {
final String n = "f\u00f6\u00f6/";
final TarArchiveEntry t = new TarArchiveEntry(n);
final ByteArrayOutputStream bos = new ByteArrayOutputStream();
- final TarArchiveOutputStream tos = new TarArchiveOutputStream(bos);
- tos.setAddPaxHeadersForNonAsciiNames(true);
- tos.putArchiveEntry(t);
- tos.closeArchiveEntry();
- tos.close();
+ try (TarArchiveOutputStream tos = new TarArchiveOutputStream(bos)) {
+ tos.setAddPaxHeadersForNonAsciiNames(true);
+ tos.putArchiveEntry(t);
+ tos.closeArchiveEntry();
+ }
final byte[] data = bos.toByteArray();
- final TarArchiveInputStream tin =
- new TarArchiveInputStream(new ByteArrayInputStream(data));
- final TarArchiveEntry e = tin.getNextTarEntry();
- assertEquals(n, e.getName());
- assertTrue(e.isDirectory());
- tin.close();
+ try (TarArchiveInputStream tin = new TarArchiveInputStream(new ByteArrayInputStream(data))) {
+ final TarArchiveEntry e = tin.getNextTarEntry();
+ assertEquals(n, e.getName());
+ assertTrue(e.isDirectory());
+ }
}
/**
@@ -522,18 +498,17 @@ public class TarArchiveOutputStreamTest extends AbstractTestCase {
final String n = "f\u00f6\u00f6\u00dc";
final TarArchiveEntry t = new TarArchiveEntry(n);
final ByteArrayOutputStream bos = new ByteArrayOutputStream();
- final TarArchiveOutputStream tos = new TarArchiveOutputStream(bos);
- tos.setAddPaxHeadersForNonAsciiNames(true);
- tos.putArchiveEntry(t);
- tos.closeArchiveEntry();
- tos.close();
+ try (TarArchiveOutputStream tos = new TarArchiveOutputStream(bos)) {
+ tos.setAddPaxHeadersForNonAsciiNames(true);
+ tos.putArchiveEntry(t);
+ tos.closeArchiveEntry();
+ }
final byte[] data = bos.toByteArray();
- final TarArchiveInputStream tin =
- new TarArchiveInputStream(new ByteArrayInputStream(data));
- final TarArchiveEntry e = tin.getNextTarEntry();
- assertEquals(n, e.getName());
- assertFalse(e.isDirectory());
- tin.close();
+ try (TarArchiveInputStream tin = new TarArchiveInputStream(new ByteArrayInputStream(data))) {
+ final TarArchiveEntry e = tin.getNextTarEntry();
+ assertEquals(n, e.getName());
+ assertFalse(e.isDirectory());
+ }
}
/**
@@ -549,11 +524,11 @@ public class TarArchiveOutputStreamTest extends AbstractTestCase {
try {
final ByteArrayOutputStream bos = new ByteArrayOutputStream();
- final TarArchiveOutputStream tos = new TarArchiveOutputStream(bos, "ASCII");
- tos.setLongFileMode(TarArchiveOutputStream.LONGFILE_ERROR);
- tos.putArchiveEntry(entry);
- tos.closeArchiveEntry();
- tos.close();
+ try (TarArchiveOutputStream tos = new TarArchiveOutputStream(bos, "ASCII")) {
+ tos.setLongFileMode(TarArchiveOutputStream.LONGFILE_ERROR);
+ tos.putArchiveEntry(entry);
+ tos.closeArchiveEntry();
+ }
fail("Truncated link name didn't throw an exception");
} catch (final RuntimeException e) {
@@ -570,17 +545,17 @@ public class TarArchiveOutputStreamTest extends AbstractTestCase {
entry.setLinkName(linkname);
final ByteArrayOutputStream bos = new ByteArrayOutputStream();
- final TarArchiveOutputStream tos = new TarArchiveOutputStream(bos, "ASCII");
- tos.setLongFileMode(TarArchiveOutputStream.LONGFILE_TRUNCATE);
- tos.putArchiveEntry(entry);
- tos.closeArchiveEntry();
- tos.close();
+ try (TarArchiveOutputStream tos = new TarArchiveOutputStream(bos, "ASCII")) {
+ tos.setLongFileMode(TarArchiveOutputStream.LONGFILE_TRUNCATE);
+ tos.putArchiveEntry(entry);
+ tos.closeArchiveEntry();
+ }
final byte[] data = bos.toByteArray();
- final TarArchiveInputStream tin = new TarArchiveInputStream(new ByteArrayInputStream(data));
- final TarArchiveEntry e = tin.getNextTarEntry();
- assertEquals("Link name", linkname.substring(0, TarConstants.NAMELEN), e.getLinkName());
- tin.close();
+ try (TarArchiveInputStream tin = new TarArchiveInputStream(new ByteArrayInputStream(data))) {
+ final TarArchiveEntry e = tin.getNextTarEntry();
+ assertEquals("Link name", linkname.substring(0, TarConstants.NAMELEN), e.getLinkName());
+ }
}
/**
@@ -610,19 +585,19 @@ public class TarArchiveOutputStreamTest extends AbstractTestCase {
entry.setLinkName(linkname);
final ByteArrayOutputStream bos = new ByteArrayOutputStream();
- final TarArchiveOutputStream tos = new TarArchiveOutputStream(bos, "ASCII");
- tos.setLongFileMode(mode);
- tos.putArchiveEntry(entry);
- tos.closeArchiveEntry();
- tos.close();
+ try (TarArchiveOutputStream tos = new TarArchiveOutputStream(bos, "ASCII")) {
+ tos.setLongFileMode(mode);
+ tos.putArchiveEntry(entry);
+ tos.closeArchiveEntry();
+ }
final byte[] data = bos.toByteArray();
- final TarArchiveInputStream tin = new TarArchiveInputStream(new ByteArrayInputStream(data));
- final TarArchiveEntry e = tin.getNextTarEntry();
- assertEquals("Entry name", "test", e.getName());
- assertEquals("Link name", linkname, e.getLinkName());
- assertTrue("The entry is not a symbolic link", e.isSymbolicLink());
- tin.close();
+ try (TarArchiveInputStream tin = new TarArchiveInputStream(new ByteArrayInputStream(data))) {
+ final TarArchiveEntry e = tin.getNextTarEntry();
+ assertEquals("Entry name", "test", e.getName());
+ assertEquals("Link name", linkname, e.getLinkName());
+ assertTrue("The entry is not a symbolic link", e.isSymbolicLink());
+ }
}
@SuppressWarnings("deprecation")
@@ -709,29 +684,28 @@ public class TarArchiveOutputStreamTest extends AbstractTestCase {
@Test
public void testPutGlobalPaxHeaderEntry() throws IOException {
+ final String x = "If at first you don't succeed, give up";
final ByteArrayOutputStream bos = new ByteArrayOutputStream();
- final TarArchiveOutputStream tos = new TarArchiveOutputStream(bos);
- final int pid = 73;
- final int globCount = 1;
- final byte lfPaxGlobalExtendedHeader = TarConstants.LF_PAX_GLOBAL_EXTENDED_HEADER;
- final TarArchiveEntry globalHeader = new TarArchiveEntry("/tmp/GlobalHead." + pid + "." + globCount,
- lfPaxGlobalExtendedHeader);
- globalHeader.addPaxHeader("SCHILLY.xattr.user.org.apache.weasels", "global-weasels");
- tos.putArchiveEntry(globalHeader);
- TarArchiveEntry entry = new TarArchiveEntry("message");
- final String x = "If at first you don't succeed, give up";
- entry.setSize(x.length());
- tos.putArchiveEntry(entry);
- tos.write(x.getBytes());
- tos.closeArchiveEntry();
- entry = new TarArchiveEntry("counter-message");
- final String y = "Nothing succeeds like excess";
- entry.setSize(y.length());
- entry.addPaxHeader("SCHILLY.xattr.user.org.apache.weasels.species", "unknown");
- tos.putArchiveEntry(entry);
- tos.write(y.getBytes());
- tos.closeArchiveEntry();
- tos.close();
+ try (TarArchiveOutputStream tos = new TarArchiveOutputStream(bos)) {
+ final int pid = 73;
+ final int globCount = 1;
+ final byte lfPaxGlobalExtendedHeader = TarConstants.LF_PAX_GLOBAL_EXTENDED_HEADER;
+ final TarArchiveEntry globalHeader = new TarArchiveEntry("/tmp/GlobalHead." + pid + "." + globCount, lfPaxGlobalExtendedHeader);
+ globalHeader.addPaxHeader("SCHILLY.xattr.user.org.apache.weasels", "global-weasels");
+ tos.putArchiveEntry(globalHeader);
+ TarArchiveEntry entry = new TarArchiveEntry("message");
+ entry.setSize(x.length());
+ tos.putArchiveEntry(entry);
+ tos.write(x.getBytes());
+ tos.closeArchiveEntry();
+ entry = new TarArchiveEntry("counter-message");
+ final String y = "Nothing succeeds like excess";
+ entry.setSize(y.length());
+ entry.addPaxHeader("SCHILLY.xattr.user.org.apache.weasels.species", "unknown");
+ tos.putArchiveEntry(entry);
+ tos.write(y.getBytes());
+ tos.closeArchiveEntry();
+ }
final TarArchiveInputStream in = new TarArchiveInputStream(new ByteArrayInputStream(bos.toByteArray()));
TarArchiveEntry entryIn = in.getNextTarEntry();
assertNotNull(entryIn);
@@ -775,14 +749,12 @@ public class TarArchiveOutputStreamTest extends AbstractTestCase {
// do I still have the correct modification date?
// let a second elapse so we don't get the current time
Thread.sleep(1000);
- final TarArchiveInputStream tarIn = new TarArchiveInputStream(
- new ByteArrayInputStream(archive2));
- final ArchiveEntry nextEntry = tarIn.getNextEntry();
- assertEquals(longFileName, nextEntry.getName());
- // tar archive stores modification time to second granularity only (floored)
- assertEquals(modificationDate.getTime() / 1000,
- nextEntry.getLastModifiedDate().getTime() / 1000);
- tarIn.close();
+ try (TarArchiveInputStream tarIn = new TarArchiveInputStream(new ByteArrayInputStream(archive2))) {
+ final ArchiveEntry nextEntry = tarIn.getNextEntry();
+ assertEquals(longFileName, nextEntry.getName());
+ // tar archive stores modification time to second granularity only (floored)
+ assertEquals(modificationDate.getTime() / 1000, nextEntry.getLastModifiedDate().getTime() / 1000);
+ }
}
@Test
@@ -795,19 +767,18 @@ public class TarArchiveOutputStreamTest extends AbstractTestCase {
assertThrows(IllegalArgumentException.class, () -> tos.putArchiveEntry(t));
}
- private static byte[] createTarArchiveContainingOneDirectory(final String fname,
- final Date modificationDate) throws IOException {
+ private static byte[] createTarArchiveContainingOneDirectory(final String fname, final Date modificationDate) throws IOException {
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
- final TarArchiveOutputStream tarOut = new TarArchiveOutputStream(baos, 1024);
- tarOut.setLongFileMode(TarArchiveOutputStream.LONGFILE_GNU);
- final TarArchiveEntry tarEntry = new TarArchiveEntry("d");
- tarEntry.setModTime(modificationDate);
- tarEntry.setMode(TarArchiveEntry.DEFAULT_DIR_MODE);
- tarEntry.setModTime(modificationDate.getTime());
- tarEntry.setName(fname);
- tarOut.putArchiveEntry(tarEntry);
- tarOut.closeArchiveEntry();
- tarOut.close();
+ try (TarArchiveOutputStream tarOut = new TarArchiveOutputStream(baos, 1024)) {
+ tarOut.setLongFileMode(TarArchiveOutputStream.LONGFILE_GNU);
+ final TarArchiveEntry tarEntry = new TarArchiveEntry("d");
+ tarEntry.setModTime(modificationDate);
+ tarEntry.setMode(TarArchiveEntry.DEFAULT_DIR_MODE);
+ tarEntry.setModTime(modificationDate.getTime());
+ tarEntry.setName(fname);
+ tarOut.putArchiveEntry(tarEntry);
+ tarOut.closeArchiveEntry();
+ }
return baos.toByteArray();
}
diff --git a/src/test/java/org/apache/commons/compress/archivers/tar/TarLister.java b/src/test/java/org/apache/commons/compress/archivers/tar/TarLister.java
index 3bfb5c2f..3a25475f 100644
--- a/src/test/java/org/apache/commons/compress/archivers/tar/TarLister.java
+++ b/src/test/java/org/apache/commons/compress/archivers/tar/TarLister.java
@@ -43,20 +43,14 @@ public final class TarLister {
if (!f.isFile()) {
System.err.println(f + " doesn't exist or is a directory");
}
- final InputStream fis = new BufferedInputStream(Files.newInputStream(f.toPath()));
- final TarArchiveInputStream ais;
- if (args.length > 1) {
- ais = new TarArchiveInputStream(fis, args[1]);
- } else {
- ais = new TarArchiveInputStream(fis);
- }
- System.out.println("Created " + ais);
- TarArchiveEntry ae;
- while((ae=ais.getNextTarEntry()) != null){
- log(ae);
+ try (InputStream fis = new BufferedInputStream(Files.newInputStream(f.toPath()));
+ TarArchiveInputStream ais = args.length > 1 ? new TarArchiveInputStream(fis, args[1]) : new TarArchiveInputStream(fis)) {
+ System.out.println("Created " + ais);
+ TarArchiveEntry ae;
+ while ((ae = ais.getNextTarEntry()) != null) {
+ log(ae);
+ }
}
- ais.close();
- fis.close();
}
private static void usage() {