diff --git a/Source/com/drew/imaging/png/PngMetadataReader.java b/Source/com/drew/imaging/png/PngMetadataReader.java index c2dd8b9e9..8fee546a8 100644 --- a/Source/com/drew/imaging/png/PngMetadataReader.java +++ b/Source/com/drew/imaging/png/PngMetadataReader.java @@ -177,10 +177,8 @@ private static void processChunk(@NotNull Metadata metadata, @NotNull PngChunk c int bytesLeft = bytes.length - (profileNameBytes.length + 1 + 1); byte[] compressedProfile = reader.getBytes(bytesLeft); - try { - InflaterInputStream inflateStream = new InflaterInputStream(new ByteArrayInputStream(compressedProfile)); + try (InflaterInputStream inflateStream = new InflaterInputStream(new ByteArrayInputStream(compressedProfile))) { new IccReader().extract(new RandomAccessStreamReader(inflateStream), metadata, directory); - inflateStream.close(); } catch(java.util.zip.ZipException zex) { directory.addError(String.format("Exception decompressing PNG iCCP chunk : %s", zex.getMessage())); metadata.addDirectory(directory); @@ -222,8 +220,8 @@ private static void processChunk(@NotNull Metadata metadata, @NotNull PngChunk c int bytesLeft = bytes.length - (keywordsv.getBytes().length + 1 + 1); byte[] textBytes = null; if (compressionMethod == 0) { - try { - textBytes = StreamUtil.readAllBytes(new InflaterInputStream(new ByteArrayInputStream(bytes, bytes.length - bytesLeft, bytesLeft))); + try (InflaterInputStream inflateStream = new InflaterInputStream(new ByteArrayInputStream(bytes, bytes.length - bytesLeft, bytesLeft))) { + textBytes = StreamUtil.readAllBytes(inflateStream); } catch(java.util.zip.ZipException zex) { PngDirectory directory = new PngDirectory(PngChunkType.zTXt); directory.addError(String.format("Exception decompressing PNG zTXt chunk with keyword \"%s\": %s", keyword, zex.getMessage())); @@ -266,8 +264,8 @@ private static void processChunk(@NotNull Metadata metadata, @NotNull PngChunk c textBytes = reader.getNullTerminatedBytes(bytesLeft, false); } else if (compressionFlag == 1) { if (compressionMethod == 0) { - try { - textBytes = StreamUtil.readAllBytes(new InflaterInputStream(new ByteArrayInputStream(bytes, bytes.length - bytesLeft, bytesLeft))); + try (InflaterInputStream inflateStream = new InflaterInputStream(new ByteArrayInputStream(bytes, bytes.length - bytesLeft, bytesLeft))) { + textBytes = StreamUtil.readAllBytes(inflateStream); } catch(java.util.zip.ZipException zex) { PngDirectory directory = new PngDirectory(PngChunkType.iTXt); directory.addError(String.format("Exception decompressing PNG iTXt chunk with keyword \"%s\": %s", keyword, zex.getMessage())); diff --git a/Source/com/drew/metadata/exif/ExifTiffHandler.java b/Source/com/drew/metadata/exif/ExifTiffHandler.java index f4a3ca0b4..f41b91246 100644 --- a/Source/com/drew/metadata/exif/ExifTiffHandler.java +++ b/Source/com/drew/metadata/exif/ExifTiffHandler.java @@ -320,8 +320,7 @@ public boolean customProcessTag(final int tagOffset, byte[] jpegrawbytes = reader.getBytes(tagOffset, byteCount); // Extract information from embedded image since it is metadata-rich - ByteArrayInputStream jpegmem = new ByteArrayInputStream(jpegrawbytes); - try { + try (ByteArrayInputStream jpegmem = new ByteArrayInputStream(jpegrawbytes)) { Metadata jpegDirectory = JpegMetadataReader.readMetadata(jpegmem); for (Directory directory : jpegDirectory.getDirectories()) { directory.setParent(_currentDirectory); diff --git a/Source/com/drew/tools/ProcessAllImagesInFolderUtility.java b/Source/com/drew/tools/ProcessAllImagesInFolderUtility.java index caa08191c..453e4a526 100644 --- a/Source/com/drew/tools/ProcessAllImagesInFolderUtility.java +++ b/Source/com/drew/tools/ProcessAllImagesInFolderUtility.java @@ -42,6 +42,7 @@ import com.drew.metadata.xmp.XmpDirectory; import java.io.*; +import java.nio.charset.StandardCharsets; import java.util.*; /** @@ -75,7 +76,11 @@ public static void main(String[] args) throws IOException printUsage(); System.exit(1); } - log = new PrintStream(new FileOutputStream(args[++i], false), true); + + try (FileOutputStream fos = new FileOutputStream(args[++i], false)) { + log = new PrintStream(fos , true); + } + } else { // Treat this argument as a directory directories.add(arg); @@ -493,26 +498,17 @@ private static PrintWriter openWriter(@NotNull File file) throws IOException javaDir.mkdir(); String outputPath = String.format("%s/metadata/java/%s.txt", file.getParent(), file.getName()); - Writer writer = new OutputStreamWriter( - new FileOutputStream(outputPath), - "UTF-8" - ); - writer.write("FILE: " + file.getName() + NEW_LINE); - - // Detect file type - BufferedInputStream stream = null; - try { - stream = new BufferedInputStream(new FileInputStream(file)); + try (Writer writer = new OutputStreamWriter(new FileOutputStream(outputPath), StandardCharsets.UTF_8); + BufferedInputStream stream = new BufferedInputStream(new FileInputStream(file))) { + writer.write("FILE: " + file.getName() + NEW_LINE); + + // Detect file type FileType fileType = FileTypeDetector.detectFileType(stream, file.getName()); writer.write(String.format("TYPE: %s" + NEW_LINE, fileType.toString().toUpperCase())); writer.write(NEW_LINE); - } finally { - if (stream != null) { - stream.close(); - } - } - return new PrintWriter(writer); + return new PrintWriter(writer); + } } private static void closeWriter(@Nullable Writer writer) throws IOException @@ -639,46 +635,47 @@ public void onScanCompleted(@NotNull PrintStream log) private void writeOutput(@NotNull PrintStream stream) throws IOException { - Writer writer = new OutputStreamWriter(stream); - writer.write("# Image Database Summary\n\n"); + try (Writer writer = new OutputStreamWriter(stream)) { + writer.write("# Image Database Summary\n\n"); - for (Map.Entry> entry : _rowListByExtension.entrySet()) { - String extension = entry.getKey(); - writer.write("## " + extension.toUpperCase() + " Files\n\n"); + for (Map.Entry> entry : _rowListByExtension.entrySet()) { + String extension = entry.getKey(); + writer.write("## " + extension.toUpperCase() + " Files\n\n"); - writer.write("File|Manufacturer|Model|Dir Count|Exif?|Makernote|Thumbnail|All Data\n"); - writer.write("----|------------|-----|---------|-----|---------|---------|--------\n"); + writer.write("File|Manufacturer|Model|Dir Count|Exif?|Makernote|Thumbnail|All Data\n"); + writer.write("----|------------|-----|---------|-----|---------|---------|--------\n"); - List rows = entry.getValue(); + List rows = entry.getValue(); - // Order by manufacturer, then model - Collections.sort(rows, new Comparator() { - public int compare(Row o1, Row o2) - { - int c1 = StringUtil.compare(o1.manufacturer, o2.manufacturer); - return c1 != 0 ? c1 : StringUtil.compare(o1.model, o2.model); + // Order by manufacturer, then model + Collections.sort(rows, new Comparator() { + public int compare(Row o1, Row o2) + { + int c1 = StringUtil.compare(o1.manufacturer, o2.manufacturer); + return c1 != 0 ? c1 : StringUtil.compare(o1.model, o2.model); + } + }); + + for (Row row : rows) { + writer.write(String.format("[%s](https://raw.githubusercontent.com/drewnoakes/metadata-extractor-images/master/%s/%s)|%s|%s|%d|%s|%s|%s|[metadata](https://raw.githubusercontent.com/drewnoakes/metadata-extractor-images/master/%s/metadata/%s.txt)\n", + row.file.getName(), + row.relativePath, + StringUtil.urlEncode(row.file.getName()), + row.manufacturer == null ? "" : row.manufacturer, + row.model == null ? "" : row.model, + row.metadata.getDirectoryCount(), + row.exifVersion == null ? "" : row.exifVersion, + row.makernote == null ? "" : row.makernote, + row.thumbnail == null ? "" : row.thumbnail, + row.relativePath, + StringUtil.urlEncode(row.file.getName()).toLowerCase() + )); } - }); - for (Row row : rows) { - writer.write(String.format("[%s](https://raw.githubusercontent.com/drewnoakes/metadata-extractor-images/master/%s/%s)|%s|%s|%d|%s|%s|%s|[metadata](https://raw.githubusercontent.com/drewnoakes/metadata-extractor-images/master/%s/metadata/%s.txt)\n", - row.file.getName(), - row.relativePath, - StringUtil.urlEncode(row.file.getName()), - row.manufacturer == null ? "" : row.manufacturer, - row.model == null ? "" : row.model, - row.metadata.getDirectoryCount(), - row.exifVersion == null ? "" : row.exifVersion, - row.makernote == null ? "" : row.makernote, - row.thumbnail == null ? "" : row.thumbnail, - row.relativePath, - StringUtil.urlEncode(row.file.getName()).toLowerCase() - )); + writer.write('\n'); } - - writer.write('\n'); + writer.flush(); } - writer.flush(); } } diff --git a/Tests/com/drew/lang/CompoundExceptionTest.java b/Tests/com/drew/lang/CompoundExceptionTest.java index f836d1767..99942a888 100644 --- a/Tests/com/drew/lang/CompoundExceptionTest.java +++ b/Tests/com/drew/lang/CompoundExceptionTest.java @@ -68,10 +68,10 @@ public void testNoInnerException() throws Exception try { throw new CompoundException("message", null); } catch (CompoundException e) { - try { - PrintStream nullStream = new PrintStream(new NullOutputStream()); + try (PrintStream nullStream = new PrintStream(new NullOutputStream()); + PrintWriter printWriter = new PrintWriter(nullStream)) { e.printStackTrace(nullStream); - e.printStackTrace(new PrintWriter(nullStream)); + e.printStackTrace(printWriter); } catch (Exception e1) { fail("Exception during printStackTrace for CompoundException with no inner exception"); }