2

最近、この回答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を削除しました)

私の質問は、 java.io( ) FileChannelを使用せずにファイルを読み取るためのまたは他のNIOクラスを取得する方法です。FileInputStream

編集:
Java 6(またはそれ以前のみ)

4

2 に答える 2

7

Java 6にはFileInputStream.getChannel()、、、FileOutputStream.getChannel()およびRandomAccessFile.getChannel()

Java7にjava.nio.channels.FileChannel.open(...)java.nio.Files.newByteChannel(...)

于 2013-12-18T16:27:53.460 に答える
6

FileChannelのjavadocは次のように述べています。

このクラスは、既存のファイルを開いたり、新しいファイルを作成したりするためのメソッドを定義しません。このようなメソッドは、将来のリリースで追加される可能性があります。このリリースでは、既存のFileInputStream、FileOutputStream、またはRandomAccessFileオブジェクトから、そのオブジェクトのgetChannelメソッドを呼び出すことにより、ファイルチャネルを取得できます。このメソッドは、同じ基になるファイルに接続されているファイルチャネルを返します。

つまり、Java 1.6では、FileChanneloldを使用せずにを取得することはできませんjava.io

于 2010-01-10T13:00:01.500 に答える