Java でファイルをコピーする方法: (推奨: Java ビデオ チュートリアル )
1. を使用します。 FileStreams のコピー
これは、あるファイルの内容を別のファイルにコピーする最も古典的な方法です。 FileInputStream を使用してファイル A のバイトを読み取り、FileOutputStream を使用してファイル B に書き込みます。これは最初のメソッドのコードです:
private static void copyFileUsingFileStreams(File source, File dest) throws IOException { InputStream input = null; OutputStream output = null; try { input = new FileInputStream(source); output = new FileOutputStream(dest); byte[] buf = new byte[1024]; int bytesRead; while ((bytesRead = input.read(buf)) != -1) { output.write(buf, 0, bytesRead); } } finally { input.close(); output.close(); } }
ご覧のとおり、try データに対して複数の読み取りおよび書き込み操作を実行しているため、次のメソッドの新しい方法で説明するように、これは非効率であるはずです。
2. FileChannel を使用してコピーする
Java NIO には transferFrom メソッドが含まれており、ドキュメントによると、これはファイル ストリームのコピーよりも高速であるはずです。これは 2 番目のメソッドのコードです:
private static void copyFileUsingFileChannels(File source, File dest) throws IOException { FileChannel inputChannel = null; FileChannel outputChannel = null; try { inputChannel = new FileInputStream(source).getChannel(); outputChannel = new FileOutputStream(dest).getChannel(); outputChannel.transferFrom(inputChannel, 0, inputChannel.size()); } finally { inputChannel.close(); outputChannel.close(); } }
3. Commons IO を使用してコピー
Apache Commons IO は、ファイルのコピー メソッドを提供します。ファイルを別の場所にコピーするために使用できる FileUtils クラス。プロジェクトですでに使用している Apache Commons FileUtils クラスを使用すると非常に便利です。基本的に、このクラスは内部で Java NIO FileChannel を使用します。これは 3 番目のメソッドのコードです:
private static void copyFileUsingApacheCommonsIO(File source, File dest) throws IOException { FileUtils.copyFile(source, dest); }
このメソッドのコア コードは次のとおりです:
private static void doCopyFile(File srcFile, File destFile, boolean preserveFileDate) throws IOException { if (destFile.exists() && destFile.isDirectory()) { throw new IOException("Destination '" + destFile + "' exists but is a directory"); } FileInputStream fis = null; FileOutputStream fos = null; FileChannel input = null; FileChannel output = null; try { fis = new FileInputStream(srcFile); fos = new FileOutputStream(destFile); input = fis.getChannel(); output = fos.getChannel(); long size = input.size(); long pos = 0; long count = 0; while (pos < size) { count = size - pos > FILE_COPY_BUFFER_SIZE ? FILE_COPY_BUFFER_SIZE : size - pos; pos += output.transferFrom(input, pos, count); } } finally { IOUtils.closeQuietly(output); IOUtils.closeQuietly(fos); IOUtils.closeQuietly(input); IOUtils.closeQuietly(fis); } if (srcFile.length() != destFile.length()) { throw new IOException("Failed to copy full contents from '" + srcFile + "' to '" + destFile + "'"); } if (preserveFileDate) { destFile.setLastModified(srcFile.lastModified()); } }
Apache Commons IO を使用してファイルをコピーする原理は次のとおりであることがわかります。上記の 2 番目の方法: FileChannel のコピーを使用します。
4. Java7 の Files クラスを使用してコピーします。
#Java 7 の経験がある場合は、 Files クラスのファイル コピー メソッドを使用して、あるファイルから別のファイルにコピーできることはご存知かもしれません。これは 4 番目のメソッドのコードです。private static void copyFileUsingJava7Files(File source, File dest) throws IOException { Files.copy(source.toPath(), dest.toPath()); }
java 基本チュートリアル 列に注目してください。
以上がJavaでファイルをコピーするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。