タイトルのように; FileChannel
閉じると、基になるファイルストリームが閉じますか?
APIドキュメントから次のようにAbstractInterruptibleChannel.close()
読むことができます。
このチャンネルを閉じます。
チャネルがすでに閉じられている場合、このメソッドはすぐに戻ります。
implCloseChannel
それ以外の場合は、チャネルを閉じているとマークしてから、閉じる操作を完了するためにメソッドを呼び出します。
呼び出すAbstractInterruptibleChannel.implCloseChannel
:
このチャンネルを閉じます。
このメソッドは、チャネルを閉じる実際の作業を実行するために、closeメソッドによって呼び出されます。このメソッドは、チャネルがまだ閉じられていない場合にのみ呼び出され、2回以上呼び出されることはありません。
このメソッドの実装では、このチャネルでのI / O操作でブロックされた他のスレッドが、例外をスローするか、通常どおりに戻ることによって、すぐに戻るように調整する必要があります。
そして、それはストリームについて何も言いません。だから実際、私がそうするとき:
public static void copyFile(File from, File to)
throws IOException, FileNotFoundException {
FileChannel sc = null;
FileChannel dc = null;
try {
to.createNewFile();
sc = new FileInputStream(from).getChannel();
dc = new FileOutputStream(to).getChannel();
long pos = 0;
long total = sc.size();
while (pos < total)
pos += dc.transferFrom(sc, pos, total - pos);
} finally {
if (sc != null)
sc.close();
if (dc != null)
dc.close();
}
}
...ストリームを開いたままにしますか?