diff --git a/image_readers/source/java/ch/systemsx/cisd/imagereaders/AbstractImageReader.java b/image_readers/source/java/ch/systemsx/cisd/imagereaders/AbstractImageReader.java index 0d6611d6a41cc6ccf572eb2b7e65dd556ba2bce6..40443af75153985ee83cc187711ff0bcb5cbcab4 100644 --- a/image_readers/source/java/ch/systemsx/cisd/imagereaders/AbstractImageReader.java +++ b/image_readers/source/java/ch/systemsx/cisd/imagereaders/AbstractImageReader.java @@ -57,7 +57,14 @@ public abstract class AbstractImageReader implements IImageReader public final List<ImageID> getImageIDs(File file) throws IOExceptionUnchecked { - return getImageIDs(new RandomAccessFileImpl(file, "r")); + RandomAccessFileImpl raf = new RandomAccessFileImpl(file, "r"); + try + { + return getImageIDs(raf); + } finally + { + raf.close(); + } } public final List<ImageID> getImageIDs(byte[] bytes) @@ -73,7 +80,13 @@ public abstract class AbstractImageReader implements IImageReader public BufferedImage readImage(File file, ImageID imageID, IReadParams params) throws IOExceptionUnchecked { IRandomAccessFile raf = new RandomAccessFileImpl(file, "r"); - return readImage(raf, imageID, params); + try + { + return readImage(raf, imageID, params); + } finally + { + raf.close(); + } } public BufferedImage readImage(byte[] bytes, ImageID imageID, IReadParams params) diff --git a/image_readers/source/java/ch/systemsx/cisd/imagereaders/AbstractMetaDataAwareImageReader.java b/image_readers/source/java/ch/systemsx/cisd/imagereaders/AbstractMetaDataAwareImageReader.java index 9c413a25e18c19ed51407ad0bc158762a03e69cf..e2a90dba58b1ea515e4182594903cb4946c613e6 100644 --- a/image_readers/source/java/ch/systemsx/cisd/imagereaders/AbstractMetaDataAwareImageReader.java +++ b/image_readers/source/java/ch/systemsx/cisd/imagereaders/AbstractMetaDataAwareImageReader.java @@ -41,7 +41,13 @@ public abstract class AbstractMetaDataAwareImageReader extends AbstractImageRead throws IOExceptionUnchecked { IRandomAccessFile raf = new RandomAccessFileImpl(file, "r"); - return readMetaData(raf, imageID, params); + try + { + return readMetaData(raf, imageID, params); + } finally + { + raf.close(); + } } @Override diff --git a/image_readers/source/java/ch/systemsx/cisd/imagereaders/bioformats/BioFormatsImageUtils.java b/image_readers/source/java/ch/systemsx/cisd/imagereaders/bioformats/BioFormatsImageUtils.java index 9d0bd012676ebdcd6cd1a3e77de5cacfa7d35a26..abfc8eec4c90256d15ec78744af4b5cb90cb1d4b 100644 --- a/image_readers/source/java/ch/systemsx/cisd/imagereaders/bioformats/BioFormatsImageUtils.java +++ b/image_readers/source/java/ch/systemsx/cisd/imagereaders/bioformats/BioFormatsImageUtils.java @@ -61,16 +61,37 @@ final class BioFormatsImageUtils */ public static IFormatReader tryToCreateReaderForFile(String fileName) { - for (IFormatReader r : READERS) + for (IFormatReader reader : READERS) { - if (r.isThisType(fileName)) + try { - return createReader(r.getClass()); + if (reader.isThisType(fileName)) + { + return createReader(reader.getClass()); + } + + } finally + { + // "r.isThisType(fileName)" line can open a file handle, + // so we need to close it + closeOpenedFiles(reader); } } return null; } + private static void closeOpenedFiles(IFormatReader r) + { + try + { + r.close(true); + } catch (IOException ex) + { + throw new IOExceptionUnchecked(ex); + } + + } + /** * Tries to create an {@link IFormatReader} for a specified name. This is a factory method which * returns for each invocation a new instance of the requested reader. May return