2017-01-18 4 views
2

GeoTiffReaderにdeleteOnExit()としてマークされたFileインスタンスを渡すと、そのファイルは終了時に削除されません。GeoTiffReaderはdeleteOnExitを防止します

File geotiffFile = Paths.get("geotools-test.tiff").toFile(); 
geotiffFile.deleteOnExit(); 
Files.readAllBytes(geotiffFile.toPath()); 

私はGeoTiffReaderが出口でファイルハンドルを解放していない疑いがある:

File geotiffFile = Paths.get("geotools-test.tiff").toFile(); 
geotiffFile.deleteOnExit(); 
GeoTiffReader reader = new GeoTiffReader(geotiffFile); 
reader.read(null); 

は、私が期待どおりに動作GeoTiffReaderなしバージョンを試してみました問題を特定するには。全コード:それはそれ以降のファイルを削除脳死オペレーティングシステムを妨げる根本的な inputStreamを解放する機会を持つように

import java.io.File; 
import java.io.IOException; 
import java.nio.file.Paths; 

import org.geotools.gce.geotiff.GeoTiffReader; 

public class GeoTiffReaderLingeringHandles 
{ 
    public static void main(String[] args) 
     throws IOException 
    { 
     main_working(args); 
     // main_broken(args); 
    } 

    public static void main_working(String[] args) 
     throws IOException 
    { 
     File geotiffFile = Paths.get("geotools-test.tiff").toFile(); 
     geotiffFile.deleteOnExit(); 
    } 

    public static void main_broken(String[] args) 
     throws IOException 
    { 
     File geotiffFile = Paths.get("geotools-test.tiff").toFile(); 
     geotiffFile.deleteOnExit(); 
     GeoTiffReader reader = new GeoTiffReader(geotiffFile); 
     reader.read(null); 
    } 
} 

答えて

1

問題を解決するには、平面画像を処分する必要があると思います。例としてコードを使用して、

public static void main_broken(String[] args) 
    throws IOException 
{ 
    File geotiffFile = Paths.get("geotools-test.tiff").toFile(); 
    geotiffFile.deleteOnExit(); 
    GeoTiffReader reader = new GeoTiffReader(geotiffFile); 
    GridCoverage2D result = reader.read(null); 
    PlanarImage planarImage = (PlanarImage) result.getRenderedImage(); 
    ImageUtilities.disposePlanarImageChain(planarImage); 
} 

終了時にGeoTiffFileが削除されます。

1

あなたはGridCoverageReaderのdispose()する必要があります。

+0

答えの良い殻がありますが、ジャスティンLの方がより完璧です。 Windowsは脳死です。 – spt5007

+0

私はカバレッジリーダーを処分するだけで十分だと確信しています –

関連する問題