Obwohl Java eine IO -Betriebsklasse bereitstellt, die Dateien verarbeiten kann, gibt es keine Methode zum Kopieren von Dateien. Kopierdateien sind ein wichtiger Vorgang. Es gibt jedoch verschiedene Methoden, die von der Java -Datei repliziert werden können, und die beliebtesten Methoden in 4 sind unten aufgeführt.
1. Kopieren Sie mit FileStreams
Dies ist die klassischste Möglichkeit, den Inhalt einer Datei in eine andere Datei zu kopieren. Lesen Sie die Bytes der Datei A mit FileInputStream durch und schreiben Sie sie mit FileOutputStream in Datei B. Dies ist der Code der ersten Methode:
Private statische void copyFileUtFileStreams (Dateiquelle, Dateidestellung) IOException {InputStream input = null; [1024];Wenn Sie einige Daten zum Lesen und Schreiben von Vorgängen sehen, sollte dies eine niedrige Methode sein.
2. Verwenden Sie FileChannel, um zu kopieren
Java nio enthält die Methode für Transferfrom, die schneller als die Dateiflusskopie gemäß dem Dokument sein sollte. Dies ist der Code der zweiten Methode:
Private statische void copyFileUtFileChannels (Dateiquelle, Dateidest) löst IOException {FileCannel InputChannel = NULL aus; , 0, InputChannel.size ());3.. Verwenden Sie Commons IO, um zu kopieren
Apache Commons IO bietet eine Kopierdateimethode in seiner Datei -Daten -Klasse, mit der eine Datei an einen anderen Ort kopiert werden kann. Es ist sehr praktisch, dass Sie Ihr Projekt verwenden, wenn Sie die Apache Commons FileUtils -Klasse verwenden. Grundsätzlich verwendet diese Klasse Java Nio Filechannel. Dies ist der Code der dritten Methode:
Private static void copyFileUptapacheCommonsio (Dateiquelle, Dateidest) löst IOException {FileUtils.copyFile (Quelle, Dest);} aus;}4. Kopieren Sie mit der Dateienklasse von Java7
Wenn Sie Erfahrung in Java 7 haben, wissen Sie möglicherweise, dass Sie die Kopiermethode von Dateien -Dateien verwenden können, um von einer Datei in eine andere Datei zu kopieren. Dies ist der Code der vierten Methode:
Private static void copyFileUningJava7Files (Dateiquelle, Dateidest) löst IOException {files.copy (source.topath (), dest.topath ());} aus5. Test
Sehen Sie nun, welche dieser Methoden effizienter ist. Wir werden eine große Datei kopieren, um jedes einfache Programm zu verwenden. Von Cache, um eine Leistung zu vermeiden, werden wir offensichtlich vier verschiedene Quelldateien und vier verschiedene Zieldateien verwenden. Schauen wir uns den Code an:
Java.io.file; .nio.file.files; /nikos7//desktop/files/sourcefile1.txt "); Datei dest = neue Datei (" c: //users/nikos7//desktop/files/destfile1.txt ") Die Datei mit FileStreams Long Start = System.nanotime ( ) Langes Ende; = Neue Datei ("c: //users/nikos7//desktop/files//sourcefile2.txt"); Quelle, Dest); //Users//nikos7//desktop//sourcefile3.txt "); dest = new Datei (" c: //users//nikos7//desktop/files/destfile3.txt "); start = system.nanotime () ; //Dateien//sourceFile4.txt "); dest = new File (" c: //users/nikos7//desktop/files/destfile4.txt "); start = system.nanotime (); SiO (Quelle, Destry) ; null; Schreiben Sie (BUF, 0, BytesRead);}} schließlich {input.close (); NULL; {InputChannel.CLOSE (); , Datei dest) löst IOException {FileUtils.copyFile (Quelle, Dest);}}} ausAusgabe:
Time taken by Filestreams Copy = 127572360Time taken by FileChannels Copy = 10449963Time taken by Java7 Files Copy = 1080833333333333333333333333333333333333333333333333time By Apache Commons IO Copy = 17971677
So wie Sie sehen können, dass FileChannels große Dateien kopieren, sind die besten Möglichkeiten. Wenn Sie größere Dateien verarbeiten, werden Sie einen größeren Geschwindigkeitsunterschied feststellen. Dies ist ein Beispiel.
Das obige ist der gesamte Inhalt dieses Artikels.