получить FileChannel без использования java.io. * (используйте чистый NIO) - PullRequest
2 голосов
/ 10 января 2010

Недавно я получил комментарий к этому ответу , что я должен держаться подальше от 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 и loop)

Мой вопрос: как получить FileChannel или другой класс NIO для чтения файла без использования java.io (FileInputStream)?

EDIT:
Java 6 (или только раньше)

Ответы [ 2 ]

5 голосов
/ 18 декабря 2013

Java 6 имеет только FileInputStream.getChannel(), FileOutputStream.getChannel() и RandomAccessFile.getChannel()

Java 7 имеет java.nio.channels.FileChannel.open(...) и java.nio.Files.newByteChannel(...)

5 голосов
/ 10 января 2010

Javadoc FileChannel говорит:

Этот класс не определяет методы для открытия существующих файлов или для создания новых; такие методы могут быть добавлены в будущем выпуске. В этом выпуске файловый канал можно получить из существующего объекта FileInputStream, FileOutputStream или RandomAccessFile, вызвав метод getChannel этого объекта, который возвращает файловый канал, который подключен к тому же базовому файлу.

То есть, с Java 1.6 вы не можете получить FileChannel без использования старого java.io.

...