不使用java.io. *获取FileChannel(使用纯NIO)

时间:2010-01-10 12:06:05

标签: java file-io copy nio channel

最近我收到了对此answer的评论,如果我想使用“纯NIO”,我应远离java.io
这是简化代码(复制文件):

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和循环)

我的问题是如何在不使用java.io(FileChannel)的情况下获取FileInputStream或其他NIO类来读取文件?

修改
Java 6(或仅限之前)

2 个答案:

答案 0 :(得分:5)

javadoc of FileChannel说:

  

此类未定义打开现有文件或创建新文件的方法;可以在将来的版本中添加此类方法。在此版本中,可以通过调用该对象的getChannel方法从现有的FileInputStream,FileOutputStream或RandomAccessFile对象获取文件通道,该方法返回连接到同一基础文件的文件通道。

也就是说,使用java 1.6,如果不使用旧版FileChannel,则无法获得java.io

答案 1 :(得分:5)

Java 6只有FileInputStream.getChannel()FileOutputStream.getChannel()RandomAccessFile.getChannel()

Java 7有java.nio.channels.FileChannel.open(...)java.nio.Files.newByteChannel(...)