大きなファイルを効率的に転送したいので、ファイル転送にはjava.io.RandomAccessFile
とjava.nio.channels.FileChannel
を使用します。私の出力ファイルのサイズがオリジナルファイルよりも小さいのはなぜですか?
出力ファイルが正しくありません。これは、元のソースファイルよりも小さくなっています。ここでは、コードは次のとおりです。
public static void transferByRandomAccess(String inputFile, String outputFile) throws IOException {
RandomAccessFile inputRandomAccessFile = null;
RandomAccessFile outputRandomAccessFile = null;
try {
inputRandomAccessFile = new RandomAccessFile(inputFile, "r");
FileChannel inputFileChannel = inputRandomAccessFile.getChannel();
outputRandomAccessFile = new RandomAccessFile(outputFile, "rw");
FileChannel outFileChannel = outputRandomAccessFile.getChannel();
inputFileChannel.transferTo(0, inputFileChannel.size(), outFileChannel);
inputFileChannel.force(true);
outFileChannel.force(true);
} finally {
if (outputRandomAccessFile != null) {
outputRandomAccessFile.close();
}
if (inputRandomAccessFile != null) {
inputRandomAccessFile.close();
}
}
}
ちなみに、私の入力ファイルは、そのサイズが2937236651バイトであるMKVビデオファイル、です。そして、私はjava.io.BufferedInputStream
とjava.io.BufferedOutputStream
とそれをコピーしている間、問題はありません。
私はあなたのコードを試しましたが、それはうまくいきます、違いは何ですか? – VinhNT
@VinhNT違いはなく、関数をコピーしてここに貼り付けます。 –
私はC:\ file1.zipでC:\ file2.zipを試してみましたが、アプリケーションの前にはC:\ file2.zipがありません。その後、file2.zipが作成され、同じサイズ(バイト単位)でfile1.zip – VinhNT