Das Kopieren von Dateien mit Java kann überall verwendet werden. Hier ist eine Klasse für Ihre Referenz. Insgesamt gibt es zwei Methoden:
public static boolean Copyfile (String srcFileName, String destfilename, boolean Overlay); public static boolean copyDirctory (String srcDirname, String destDirname, boolean Overlay);
In:
SRCFileName -Dateiname zu kopieren,
DescFileName -Zieldateiname
Überlagerung , wenn die Zieldatei vorliegt, ob sie sie überschreiben soll. Wenn die Kopie erfolgreich ist, geben Sie True zurück, andernfalls geben Sie false zurück
Code:
Import Java.io.file; import Java.io.FileInputStream; importieren java.io.filenotfoundException; importieren java.io.fileoutputStream; importieren java.io.ioException; importieren java.io.inputstream; importieren java.io.outputstream; import Javax.swing.joptionpane; / ** * Datei oder Ordner kopieren * * zww */ public class copyFileUtil {private statische String message = ""; / ** * Kopieren Sie eine einzelne Datei * * @param srcFileName * Dateiname, die kopiert werden soll neue Datei (SRCFileName); // Bestimmen Sie, ob die Quelldatei vorhanden ist, wenn (! Joptionpane.showmessagedialog (null, message); false zurückgeben; } else if (! Joptionpane.showmessagedialog (null, message); false zurückgeben; } // Bestimmen Sie, ob die Zieldatei Datei destfile = neue Datei (DestfileName) existiert; if (destfile.exists ()) {// Wenn die Zieldatei vorhanden ist und überschreibt, wenn (Overlay) {// die vorhandene Zieldatei löschen, unabhängig davon, ob die Zieldatei ein Verzeichnis oder eine einzige neue Datei ist (destfilename) .delete (); }} else {// Wenn das Verzeichnis, in dem die Zieldatei nicht vorhanden ist, erstellen Sie das Verzeichnis if (! destfile.getParentFile (). exists ()) {// Das Verzeichnis, in dem die Zieldatei nicht existiert, wenn (! destfile.getParentFile (). }}} // Datei int byteread = 0 kopieren; // Anzahl der Bytes lesen InputStream in = null; OutputStream out = null; try {in = new FileInputStream (srcFile); out = new FileOutputStream (destfile); byte [] buffer = neues byte [1024]; while ((byteread = in.read (puffer))! = -1) {out.write (buffer, 0, byteread); } Return true; } catch (FilenotFoundException e) {return false; } catch (ioException e) {return false; } endlich {try {if (out! = null) out.close (); if (in! = null) in.close (); } catch (ioException e) {e.printstacktrace (); }}}} / ** * Kopieren Sie den Inhalt des gesamten Verzeichnisses * * @param srcdirname * Verzeichnisname des zu kopierten Verzeichnisses * @param destDirname * Zielverzeichnisname * @param Overlay * Wenn das Zielverzeichnis existiert, ob das Kopieren erfolgreich ist. destDirname, boolean Overlay) {// Bestimmen Sie, ob das Quellverzeichnis die Datei srcdir = neue Datei (srcDirname) existiert; if (! Joptionpane.showmessagedialog (null, message); false zurückgeben; } else if (! Joptionpane.showmessagedialog (null, message); false zurückgeben; } // Wenn der Name des Zielverzeichnisses nicht mit einer Datei -Abgrenzung endet, fügen Sie den Datei -Degrenzer hinzu, wenn (! DestDirname.endswith (Datei.Sesparator)) {destDirname = destDirname + Datei.separator; } Datei destDir = neue Datei (destDiRname); // Wenn der Zielordner existiert, wenn (destDir.exists ()) {// Wenn Overlay zulässig ist, löschen Sie das vorhandene Zielverzeichnis, wenn (Overlay) {neue Datei (destDirname) .Delete (); } else {message = "Verzeichnis kopieren fehlgeschlagen: Zielverzeichnis" + destDirname + "Es gab bereits existiert!"; Joptionpane.showmessagedialog (null, message); false zurückgeben; }} else {// Erstellen Sie das Zielverzeichnis system.out.println ("Das Zielverzeichnis existiert nicht, bereit zu erstellen ..."); if (! destdir.mkdir ()) {System.out.println ("Verzeichnis kopieren fehlgeschlagen: Das Erstellen des Zielverzeichnisses fehlgeschlagen!"); false zurückgeben; }} boolean flag = true; Datei [] file = srcdir.listfiles (); für (int i = 0; i <files.length; i ++) {// Datei kopieren if (Dateien [i] .isfile ()) {flag = copyFileUtil.copyFile (Dateien [i] .GetAbsolutepath (), destiRname+Dateien [i] .getname (), Überlagerung); wenn (! Flagge) Break; } else if (Dateien [i] .isDirectory ()) {flag = copyFileUtil.copyDirectory (Dateien [i] .getabSolutepath (), DestDirname + Dateien [i] .getName (), Overlay); wenn (! Flagge) Break; }} if (! flag) {message = "Verzeichnis kopieren" + srcDirname + "to" + destDirname + "fehlgeschlagen!"; Joptionpane.showmessagedialog (null, message); false zurückgeben; } else {return true; }} public static void main (String [] args) {String srcDirname = "c:/test/test0/test1"; String destDirname = "c:/ttt"; CopyFileUtil.CopyDirctory (srcDirname, destDirname, true); }}Ohne Berücksichtigung der Multi-Thread-Optimierung ist der schnellste Weg, um Single-Threaded-Dateien zu kopieren (je größer die Datei ist, desto mehr Vorteil ist sie im Allgemeinen 30+% schneller als die häufig verwendeten Methoden):
private static void niotransferCopy (Dateiquelle, Dateiziel) {FileChannel in = null; Filechannel out = null; FileInputStream Instream = NULL; FileOutputStream outstream = null; try {instream = new FileInputStream (Quelle); outstream = new FileOutputStream (Ziel); in = instream.getCannel (); out = outstream.getchannel (); in.transferto (0, in.size (), out); } catch (ioException e) {e.printstacktrace (); } endlich {close (instrenm); schließen (in); schließen (außerhalb); schließen (raus); }}Wenn Sie den Replikationsfortschritt überwachen müssen, können Sie die zweitschnellste Methode verwenden (achten Sie auf die Größe des Puffers, was einen großen Einfluss auf die Geschwindigkeit hat):
private statische void Niobuffencopie (Dateiquelle, Dateiziel) {FileChannel in = null; Filechannel out = null; FileInputStream Instream = NULL; FileOutputStream outstream = null; try {instream = new FileInputStream (Quelle); outstream = new FileOutputStream (Ziel); in = instream.getCannel (); out = outstream.getchannel (); Bytebuffer buffer = bytebuffer.alcode (4096); while (in.read (buffer)! = -1) {buffer.flip (); out.write (puffer); buffer.clear (); }} catch (ioException e) {e.printstacktrace (); } endlich {close (instrenm); schließen (in); schließen (außerhalb); schließen (raus); }}Häufig verwendete Methode 1 ist:
private static void CustomBufferBuffenedStreamCopy (Dateiquelle, Dateiziel) {inputStream fis = null; OutputStream fos = null; try {fis = new buferedInputStream (neuer FileInputStream (Quelle)); fos = new bufferedOutputStream (neuer FileOutputStream (Ziel)); byte [] buf = new byte [4096]; int i; while ((i = fis.read (buf))! = -1) {fos.write (buf, 0, i); }} catch (Ausnahme e) {e.printstacktrace (); } endlich {close (fis); schließen (fos); }}Häufig verwendete Methode 2 ist:
private static void CustomBufferStreamCopy (Dateiquelle, Dateiziel) {inputStream fis = null; OutputStream fos = null; try {fis = new FileInputStream (Quelle); fos = new FileOutputStream (Ziel); byte [] buf = new byte [4096]; int i; while ((i = fis.read (buf))! = -1) {fos.write (buf, 0, i); }} catch (Ausnahme e) {e.printstacktrace (); } endlich {close (fis); schließen (fos); }}Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.