私はそこに同様の資格のある質問がいくつかあることを知っていますが、ほとんどの人はストリームにclose()
ディレクティブを置くことを忘れています。これはここでは違います。リソースリーク: 'in'は決して閉じられませんが、それは閉じています
public void test() throws IOException
{
InputStream in;
if(file.exists())
{
in = new FileInputStream(file);
}
else
{
in = new URL("some url").openStream();
}
in.close();
}
これは私のEclipseでResource leak: 'in' is never closed
警告(ジュノSR1)を得た:
は、私は、次の最小限の例を考えてみましょう。 しかし、私は、条件付きブロックにin.close()
を移動すると、警告が消える:
public void test() throws IOException
{
InputStream in;
if(file.exists())
{
in = new GZIPInputStream(new FileInputStream(file));
in.close();
}
else
{
in = new URL("some URL").openStream();
}
}
ここで何が起こっていますか?
ここで警告します。 IDE? Javaのコンパイル?どのIDEですか?どのバージョン? – Gimby
* "...警告が消える:" *。どの警告? –
あなたはtry/finallyブロックを持っているべきです。 finallyブロックのストリームを閉じて、例外がスローされた場合にそれを逃さないようにします。 – duffymo