Déplacer / copier les opérations de fichiers en Java
Existe-t-il une bibliothèque Java standard qui gère les opérations courantes de fichiers telles que le déplacement/copie de fichiers/dossiers?
7 réponses
Voici comment faire avec java.nio
opérations:
public static void copyFile(File sourceFile, File destFile) throws IOException {
if(!destFile.exists()) {
destFile.createNewFile();
}
FileChannel source = null;
FileChannel destination = null;
try {
source = new FileInputStream(sourceFile).getChannel();
destination = new FileOutputStream(destFile).getChannel();
// previous code: destination.transferFrom(source, 0, source.size());
// to avoid infinite loops, should be:
long count = 0;
long size = source.size();
while((count += destination.transferFrom(source, count, size-count))<size);
}
finally {
if(source != null) {
source.close();
}
if(destination != null) {
destination.close();
}
}
}
pas encore, mais le Nouveau NIO (JSR 203) aura l'appui pour ces opérations communes.
Dans l'intervalle, il ya quelques choses à garder à l'esprit.
"151970920 de Fichier".renameTo ne fonctionne généralement que sur le même volume de système de fichiers. Je pense que c'est l'équivalent d'une commande "mv". Utilisez-le si vous le pouvez, mais pour la copie générale et le soutien de déplacement, vous aurez besoin d'avoir un repli.
Lorsqu'un renommage ne fonctionne pas, vous devrez copier le fichier (en supprimant l'original avec le fichier ).supprimer si c'est une opération de" déplacement"). Pour ce faire avec la plus grande efficacité, utilisez le FileChannel.transferTo ou FileChannel.transfert des méthodes . L'implémentation est spécifique à la plate-forme, mais en général, lors de la copie d'un fichier à un autre, les implémentations évitent de transporter des données d'un noyau à l'autre. espace utilisateur, donnant un grand coup de pouce à l'efficacité.
Check out: http://commons.apache.org/io/
il a copie, et comme indiqué le JDK a déjà mouvement.
N'utilisez pas votre propre méthode de copie. Il ya tellement de nombreux flottant là-bas...
les réponses précédentes semblent périmées.
fichier Java .renameTo () est probablement la solution la plus facile pour API 7, et semble fonctionner très bien. Attention, il ne lance pas D'EXCEPTIONS, mais renvoie true / false!!!
notez qu'il semble y avoir des problèmes avec elle dans les versions précédentes (même que NIO ).
si vous avez besoin d'utiliser une version précédente, cochez ici .
Here's an example for API7:
File f1= new File("C:\Users\.....\foo");
File f2= new File("C:\Users\......\foo.old");
System.err.println("Result of move:"+f1.renameTo(f2));
alternativement:
System.err.println("Move:" +f1.toURI() +"--->>>>"+f2.toURI());
Path b1=Files.move(f1.toPath(), f2.toPath(), StandardCopyOption.ATOMIC_MOVE ,StandardCopyOption.REPLACE_EXISTING ););
System.err.println("Move: RETURNS:"+b1);
bibliothèque de goyave de Google a également ces:
http://guava-libraries.googlecode.com/svn/trunk/javadoc/com/google/common/io/Files.html
Essayez d'utiliser org.apache.commons.io.FileUtils (fichier Général utilitaires de manipulation). Les installations sont fournies selon les méthodes suivantes:
(1) FileUtils.moveDirectory(Fichier srcDir, Fichier destDir) => Déplace un répertoire.
(2) FileUtils.moveDirectoryToDirectory (fichier src, fichier destDir, booléen createDestDir) = > déplace un répertoire vers un autre répertoire.
(3) FileUtils.moveFile(Fichier srcFile, Fichier destFile) => Déplace un fichier.
(4) FileUtils.moveFileToDirectory (fichier srcFile, fichier destDir, booléen createDestDir) = > déplace un fichier vers un répertoire.
(5) FileUtils.moveToDirectory (fichier src, fichier destDir, booléen createDestDir) = > déplace un fichier ou un répertoire destination répertoire.
C'est simple, facile et rapide.
observation intéressante: Essayé de copier le même fichier via différentes classes java et le temps imprimé en nano secondes.
Durée à l'aide FileOutputStream flux d'octets: 4 078 965
Duration using BufferedOutputStream: 1 237 206
la Durée de l'aide (caractères de texte Reader: 2 858 875
Durée à l'aide BufferedReader(Tampon de caractères flux de texte: 1 998 005
durée en utilisant (Dossiers copie NIO): 18 351 115
lorsque vous utilisez L'option Copier des fichiers Nio, cela prend presque 18 fois plus de temps!!! Nio est l'option la plus lente pour copier des fichiers et BufferedOutputStream ressemble à la plus rapide. J'ai utilisé le même fichier texte simple pour chaque classe.