получить FileChannel без использования java.io.* (используйте чистый NIO)
Вопрос
Недавно я получил комментарий по этому поводу отвечать что мне следует держаться подальше от java.io
если я хочу использовать «чистый NIO».
Это упрощенный код (скопируйте файл):
private static void copy(File source, File destination) throws IOException {
long length = source.length();
FileChannel input = new FileInputStream(source).getChannel();
FileChannel output = new FileOutputStream(destination).getChannel();
input.transferTo(0, length, output);
output.close();
input.close();
}
(код предельно упрощен:удалены try-finally и цикл)
Мой вопрос в том, как получить FileChannel
или другой класс NIO для чтения файла без использования java.io (FileInputStream
)?
РЕДАКТИРОВАТЬ:
Java 6 (или только ранее)
Решение
А javadoc FileChannel говорит:
Этот класс не определяет методы открытия существующих файлов или создания новых;такие методы могут быть добавлены в будущем выпуске.В этом выпуске файловый канал можно получить из существующего объекта FileInputStream, FileOutputStream или RandomAccessFile, вызвав метод getChannel этого объекта, который возвращает файловый канал, подключенный к тому же базовому файлу.
То есть с Java 1.6 вы не сможете получить FileChannel
без использования старых java.io
.
Другие советы
Java 6 имеет только FileInputStream.getChannel()
, FileOutputStream.getChannel()
, и RandomAccessFile.getChannel()
Java 7 имеет java.nio.channels.FileChannel.open(...)
и java.nio.Files.newByteChannel(...)