Javaでファイルをコピーするにはどうすればよいですか?

リリース: 2019-12-03 13:35:39
オリジナル
8816 人が閲覧しました

Javaでファイルをコピーするにはどうすればよいですか?

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 基本チュートリアル 列に注目してください。

以上がJavaでファイルをコピーするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!