Как и название; Закрывает ли закрывающий FileChannel
основной поток файлов?
В документах API AbstractInterruptibleChannel.close()
вы можете прочитать:
Закрывает этот канал.
Если канал уже закрыт, этот метод возвращает немедленно. В противном случае он отмечает канал как закрытый, а затем вызывает
implCloseChannel
, чтобы завершить операцию закрытия.
Что вызывает AbstractInterruptibleChannel.implCloseChannel
:
Закрывает этот канал.
Этот метод вызывается методом close, чтобы выполнить фактическая работа по закрытию канала. Этот метод вызывается только в том случае, если канал еще не закрыт, и он никогда не вызывается больше, чем один раз.
Реализация этого метода должна предусматривать любой другой поток который заблокирован в операции ввода-вывода по этому каналу для возврата немедленно, либо выбросив исключение, либо, вернувшись нормально.
И это ничего не говорит о потоке. Так что, когда я это делаю:
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();
}
}
... Я оставляю потоки открытыми?