La copie de fichiers à l'aide de Java peut être utilisée partout. Voici une classe pour votre référence. Il existe deux méthodes au total:
Public Static Boolean CopyFile (String SrcFileName, String Destfilename, Boolean Superlay); public static boolean copyDirctory (String srcdirname, String destdirname, Boolean superlay);
dans:
Nom du fichier srcfilename à copier
DescFileName Target Fichier Nom
Recouvrez si le fichier cible existe, s'il faut l'écraser. Si la copie est réussie, retournez vrai, sinon renvoyez false
Code:
Importer java.io.file; import java.io.fileInputStream; import java.io.filenotfoundException; Importer java.io.fileOutputStream; Importer java.io.ioException; import java.io.inputStream; import java.io.outputStream; import javax.swing.joptionpane; / ** * Copier le fichier ou le dossier * * ZWW * / classe publique CopyFileUtil {private static String Message = ""; / ** * Copiez un seul fichier * * @param srcFileName * Nom du fichier à copier * @param descfilename * Nom du fichier cible * @param superposition * Si le fichier cible existe, que ce soit écraser * @return si la copie est réussie, return true, sinon return false * / public static boolean CopyFile (string srcfilename, String Desting Desting = nouveau fichier (srcFileName); // Déterminez si le fichier source existe si (! Srcfile.exists ()) {message = "fichier source:" + srcFileName + "pas existant!"; JOptionPane.showMessageDialog (null, message); retourne false; } else if (! srcfile.isfile ()) {message = "Copier le fichier a échoué, fichier source:" + srcfilename + "pas un fichier!"; JOptionPane.showMessageDialog (null, message); retourne false; } // Déterminez si le fichier cible existe un fichier destfile = nouveau fichier (destFileName); if (destfile.exists ()) {// Si le fichier cible existe et permet d'écraser si (superposition) {// supprime le fichier cible existant, que le fichier cible soit un répertoire ou un seul fichier nouveau fichier (destFileName) .Delete (); }} else {// Si le répertoire dans lequel le fichier cible n'existe pas, créez le répertoire if (! destfile.getParentFile (). existant ()) {// Le répertoire où le fichier cible n'existe pas si (! destfile.getParentFile (). MKDIRS ()) {// a échoué pour copier le fichier: a échoué à créer le répertoire lorsque le fichier cible est renvoyé; }}} // Copier le fichier int byterEad = 0; // Nombre d'octets Read InputStream dans = NULL; OutputStream out = null; try {in = new FileInputStream (srcfile); out = new FileOutputStream (destFile); octet [] tampon = nouveau octet [1024]; while ((byterEad = in.read (tampon))! = -1) {out.write (tampon, 0, byteread); } return true; } catch (filenotfoundException e) {return false; } catch (ioException e) {return false; } enfin {try {if (out! = null) out.close (); if (in! = null) in.close (); } catch (ioException e) {e.printStackTrace (); }}}} / ** * Copiez le contenu de l'intégralité du répertoire * * @param srcdirname * Nom du répertoire du répertoire à copier * @param destdirname * Nom du répertoire de destination * @param superposition * Si le répertoire cible existe, qu'il s'agisse d'écraser * @return si la copie est réussie, autrement FAUX * / Public STATIC STATIQUE destdirName, superposition booléenne) {// Déterminez si le répertoire source existe un fichier srcdir = nouveau fichier (srcdirname); if (! srcdir.exists ()) {message = "Copy Directory a échoué: le répertoire source" + srcdirname + "Don't Exist!"; JOptionPane.showMessageDialog (null, message); retourne false; } else if (! srcdir.isDirectory ()) {message = "Copy Directory a échoué:" + srcdirname + "pas un répertoire!"; JOptionPane.showMessageDialog (null, message); retourne false; } // Si le nom du répertoire cible ne se termine pas avec un délimiteur de fichiers, ajoutez le dimitateur de fichier if (! Destdirname.endswith (file.separator)) {destdirname = destdirname + file.separator; } Fichier destdir = nouveau fichier (destdirName); // Si le dossier cible existe if (destdir.exists ()) {// Si la superposition est autorisée, supprimez le répertoire cible existant if (superposition) {nouveau fichier (destdirName) .delete (); } else {message = "Copy Directory a échoué: le répertoire de destination" + destdirname + "déjà existé!"; JOptionPane.showMessageDialog (null, message); retourne false; }} else {// Créer le répertoire de destination System.out.println ("Le répertoire de destination n'existe pas, prêt à créer ..."); if (! destdir.mkdir ()) {System.out.println ("Le répertoire de copie a échoué: la création du répertoire de destination a échoué!"); retourne false; }} booléen drapeau = true; File [] files = srcdir.listFiles (); for (int i = 0; i <files.length; i ++) {// copy file if (files [i] .isfile ()) {flag = copyfileUtil.copyfile (files [i] .getAbsolutepath (), destdirname + files [i] .getName (), superlay); si (! Flag) se casse; } else if (files [i] .isDirectory ()) {flag = copyfileUtil.copyDirectory (fichiers [i] .getAbsolutepath (), destdirName + files [i] .getName (), superposition); si (! Flag) se casse; }} if (! Flag) {message = "Copy Directory" + srcdirname + "à" + destdirname + "Faillit!"; JOptionPane.showMessageDialog (null, message); retourne false; } else {return true; }} public static void main (string [] args) {String srcdirname = "c: / test / test0 / test1"; String destdirName = "C: / TTT"; Copyfileutil.copydirctory (srcdirname, destdirname, true); }}Sans considérer l'optimisation multi-thread, le moyen le plus rapide de copier des fichiers unique est (plus le fichier est grand, plus il est avantageux, il est généralement 30 +% plus rapide que les méthodes couramment utilisées):
private static void niotransferCopy (source de fichier, cible de fichier) {fileChannel dans = null; FileChannel out = null; FileInputStream InsideRam = NULL; FileOutputStream outstream = null; try {insiver = new FileInputStream (source); outStream = new FileOutputStream (Target); in = insiteam.getChannel (); out = outstream.getChannel (); in.transferto (0, in.size (), out); } catch (ioException e) {e.printStackTrace (); } Enfin {Close (Instream); Close (in); Fermer (en dehors); liquidation); }}Si vous devez suivre les progrès de la réplication, vous pouvez utiliser la deuxième méthode la plus rapide (faites attention à la taille du tampon, ce qui a un grand impact sur la vitesse):
Private Static void niobuffery (source de fichier, cible de fichier) {fileChannel dans = null; FileChannel out = null; FileInputStream InsideRam = NULL; FileOutputStream outstream = null; try {insiver = new FileInputStream (source); outStream = new FileOutputStream (Target); in = insiteam.getChannel (); out = outstream.getChannel (); ByteBuffer Buffer = BYTEBUFFER.ALLOCY (4096); while (in.read (tampon)! = -1) {buffer.flip (); out.write (tampon); buffer.clear (); }} catch (ioException e) {e.printStackTrace (); } Enfin {Close (Instream); Close (in); Fermer (en dehors); liquidation); }}La méthode couramment utilisée 1 est:
Private Static void CustomBufferBufferredStreamCopy (Source de fichier, cible de fichier) {InputStream fis = null; OutputStream fos = null; try {fis = new BufferedInputStream (new FileInputStream (source)); fos = new BufferedOutputStream (new FileOutputStream (Target)); octet [] buf = nouveau octet [4096]; int i; while ((i = fis.read (buf))! = -1) {fos.write (buf, 0, i); }} catch (exception e) {e.printStackTrace (); } enfin {close (fis); Close (FOS); }}La méthode couramment utilisée est:
Private Static void CustomBuffersTreamCopy (source de fichier, cible de fichier) {inputStream fis = null; OutputStream fos = null; try {fis = new FileInputStream (source); fos = new FileOutputStream (cible); octet [] buf = nouveau octet [4096]; int i; while ((i = fis.read (buf))! = -1) {fos.write (buf, 0, i); }} catch (exception e) {e.printStackTrace (); } enfin {close (fis); Close (FOS); }}Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.