Javaはファイルを処理できるIO操作クラスを提供していますが、ファイルをコピーする方法はありません。コピーファイルは重要な操作です。ただし、Javaファイルで複製できるいくつかの方法があり、4で最も一般的な方法を以下に示します。
1。Filestreamsでコピーします
これは、あるファイルのコンテンツを別のファイルにコピーする最も古典的な方法です。 FileInputStreamを使用してファイルAのバイトを読み取り、FileOutputStreamを使用してファイルBに書き込みます。 これは、最初の方法のコードです。
Private void copyfileusingfileStreams(ファイルSource)スロー{null = null; [1024];読み取りおよび書き込み操作のいくつかのデータが表示されているように、これは低い方法である必要があります。
2。FileChannelを使用してコピーします
Java Nioには、Transfer -Fromメソッドが含まれています。これは、ドキュメントに従ってファイルフローコピーよりも高速にする必要があります。これは、2番目の方法のコードです。
Private void copyFileUsingFileChannels(ファイルソース)は、IoException {inputChannel = new fileInputStream(source).getChannel(); 、0、inputChannel.close();3.コモンズIOを使用してコピーします
Apache Commons IOは、FileUtilsクラスにコピーファイルメソッドを提供します。これは、1つのファイルを別の場所にコピーするために使用できます。 Apache Commons Fileutilsクラスを使用するときに、プロジェクトを使用することは非常に便利です。基本的に、このクラスではJava Nio Filechannelを使用しています。 これは、3番目の方法のコードです。
private static void copyfileusingapachecommonsio(file source、file dest)throws ioexception {fileutils.copyfile(source、dest);}4。Java7のファイルクラスでコピーします
Java 7で何らかの経験がある場合は、ファイルのコピー方法を使用して、あるファイルから別のファイルにコピーできることがわかる場合があります。 これは、4番目の方法のコードです。
private static void copyfileusingjava7files(ファイルソース、ファイルdest)throws ioexception {files.copy(source.topath()、dest.topath();}5。テスト
次に、これらのメソッドのどれがより効率的であるかを確認するには、各シンプルなプログラムを使用するために大きなファイルをコピーします。 パフォーマンスを回避するためのキャッシュから、明らかに4つの異なるソースファイルと4つの異なるターゲットファイルを使用します。 コードを見てみましょう:
java.fileutputStreamのインポート.nio.file.files; apache.commons.io.fileutils; /nikos7//desktop/files/sourcefile1.txt "); file dest = new file(" c://users/nikos7//desktop/files/destfile1.txt ")ファイストリームを使用してファイルをコピーします。 )ロングエンド= new file( "c://users/nikos7//desktop/files//sourcefile2.txt");ソース、dest); system.nanotime(); //users//nikos7//desktop//sourcefile3.txt "); dest = new file(" c://users//nikos7//desktop/files/destfile3.txt "); start = system.nanotime() ; //files//sourcefile4.txt "); dest = new file(" c://users/nikos7//desktop/files/destfile4.txt "); start = system.nanotime(); sio(source、destry); ; end = system.out.println( "copy =" +(end -start)); null {new fileInputStrem(source); write(buf、0、bytesread);}} finally {input.close(); null {inputchannel = new fileinputStream(source).getChannel(); {inputChannel.close (); OutputChannel.close ();}} Private Static Void Copyfileusingjava7files (File Dest) Throws IOEXCEPION Files.copy (source.topath (), Dest.topath ());} Private Static Void Copyfileusingapachecommonsio (File Source 、file dest)throws ioexception {fileutils.copyfile(source、dest);}}}}}出力:
Time taken by Filestreams Copy = 127572360Time taken by FileChannels Copy = 10449963Time taken by Java7 Files Copy = 1080833333333333333333333333333333333333333333333333time By Apache Commons IO Copy = 17971677
FileChannelsを見ることができるように、大きなファイルをコピーすることが最良の方法です。大きなファイルを処理すると、より大きな速度の違いがあることに気付くでしょう。これは、ファイルをコピーするためのJavaの4つの異なる方法を示しています。
上記は、この記事のすべての内容です。