3 votos

Problema al cerrar un archivo geotiff

Tengo un método en el que abro un archivo geotiff e imprimo sus dimensiones

    public void parseAndSaveFile(String pathFileToParse) throws IOException, Exception {

        GridCoverage2DReader reader = null;
        GridCoverage2D image        = null;
        BufferedImage img           = null;

        try {

            File f = new File(pathFileToParse);

            ParameterValue<OverviewPolicy> policy = AbstractGridFormat.OVERVIEW_POLICY.createValue();
            policy.setValue(OverviewPolicy.IGNORE);

            // this will basically read 4 tiles worth of data at once from the disk...
            ParameterValue<String> gridsize = AbstractGridFormat.SUGGESTED_TILE_SIZE.createValue();
            //gridsize.setValue(512 * 4 + "," + 512);

            // Setting read type: use JAI ImageRead (true) or ImageReaders read methods (false)
            ParameterValue<Boolean> useJaiRead = AbstractGridFormat.USE_JAI_IMAGEREAD.createValue();
            useJaiRead.setValue(true);

            reader = new GeoTiffReader(f);      
            //reader.read(new GeneralParameterValue[] { policy, gridsize, useJaiRead });
            image = reader.read(new GeneralParameterValue[]{policy, gridsize, useJaiRead});
            //Rectangle2D bounds2D = image.getEnvelope2D().getBounds2D();
            // calculate zoom level for the image
            GridGeometry2D geometry = image.getGridGeometry();

            img = ImageIO.read(f);
            //WritableRaster raster = img.getRaster();
            //int numBands = raster.getNumBands();

            int width   = img.getWidth();
            int height  = img.getHeight();

            logger.info("Width: {}, Height: {}", width, height);

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            reader.dispose();
            image.dispose(true);
        }
    }

En el método de llamada, intento eliminar el archivo

Files.deleteIfExists(Paths.get(pathFileToParse));

pero me aparece el error

No se puede acceder al archivo. El fichero está siendo utilizado por otro proceso.

¿Por qué? ¿He liberado correctamente el archivo geotiff?

1voto

Adam Ernst Puntos 6939

Ese código me funciona perfectamente en Linux, así que a no ser que estés haciendo algo impar en el resto del programa es un problema de windows.

He añadido esto main método:

public static void main(String[] args) throws IOException, Exception {
    ParseAndDelete me = new ParseAndDelete();

    String pathFileToParse = "test3.tif";
    me.parseAndSaveFile(pathFileToParse);
    Files.deleteIfExists(Paths.get(pathFileToParse));
  }

¿Le parece bien?

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X