Bonjour les gens. Je programme en Java depuis longtemps et vous ne le croirez pas, mais il y avait pas de méthode de copie de fichier dans l’API Java jusqu’à Java 7. Nos options étaient soit de : l’écrire nous-mêmes en utilisant un FileInputStream, un FileOutputStream et un tampon pour copier des octets de l’un à l’autre ; ou, mieux encore, utilisez le FileChannel.transferTo() ou Apache Commons FileUtils, qui était une bouée de sauvetage à l’époque et l’est toujours aujourd’hui.
JDK a évolué maintenant et vous disposez d’une API décente pour copier des fichiers d’un répertoire à un autre. Dans cet article, je vais vous montrer à la fois le code pré-Java pour copier des fichiers d’un répertoire à un autre ainsi que le code Java 7, ce qui rend cette tâche beaucoup plus facile.
1. Copie de fichiers d’un répertoire à un autre avant Java 7
Dépendance : Apache Commons IO
1.1 FileUtils.copyFile (Source du fichier, Destination du fichier)
Cette méthode copie un fichier vers un nouvel emplacement en préservant l’horodatage du fichier. Il copie également le contenu du fichier source spécifié dans le fichier de destination spécifié. Le répertoire contenant le fichier de destination est créé s’il n’existe pas. Si le fichier de destination existe, cette méthode l’écrasera.
import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
/**
* Java program to copy a file from one directory to another e.g. from src to dest
*
* @author Javin
*/
public class FileCopyDemo {
public static void main(String args[]) {
// Using Apache Commons FileUtils class
File srcFile = new File("bin/HelloWorld.class");
File destFile = new File("target/HelloWorld.class");
try {
FileUtils.copyFile(srcFile, destFile);
System.out.println("File successfully copied in Java");
} catch (IOException e) {
e.printStackTrace();
}
}
}
Output:
System.out.println("File successfully copied in Java");
1.2 Copie un fichier dans un répertoire en conservant l’horodatage
Cette méthode copie le contenu du fichier source spécifié dans un fichier du même nom dans le répertoire de destination spécifié. Le répertoire de destination est créé s’il n’existe pas. Si le fichier de destination existe, cette méthode l’écrasera.
import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
/**
* Java program to copy a file from one directory to another like from src to dest
*
* @author Javin Paul
*/
public class Testing {
public static void main(String args[]) {
// Using Apache Commons FileUtils class
File srcFile = new File("bin/HelloWorld.class");
File destDir = new File("target");
try {
FileUtils.copyFileToDirectory(srcFile, destDir);
System.out.println("File successfully copied to destination directory in Java");
} catch (IOException e) {
e.printStackTrace();
}
}
}
Output
File successfully copied to destination directory in Java
2. Copie de fichiers d’un répertoire à un autre à l’aide de l’API Java 7 NIO 2
En Java 7, il existe une méthode standard pour copier des fichiers : Files.copy.
Il s’intègre aux E/S natives du système d’exploitation pour des performances élevées.
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import static java.nio.file.StandardCopyOption.*;
import static java.nio.file.LinkOption.*;
/**
* Java program to copy file using Java 7 Files.copy() method
*
* @author Javin Paul
*/
public class FileCopyDemo {
public static void main(String args[]) {
try {
Path bytes = Files.copy(
new Java.io.File("bin/HelloWorld.class").toPath(),
new java.io.File("target/HelloWorld.class").toPath(),
REPLACE_EXISTING,
COPY_ATTRIBUTES,
NOFOLLOW_LINKS);
System.out.println("File successfully copied using Java 7 way");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Vous pouvez également copier des fichiers en Java en écrivant du code à l’aide de FileInputStream et FileOuputStream, mais ce n’est tout simplement pas nécessaire, étant donné que Java 7 est installé.
Alternativement, la classe Apache Commons IO FileUtils est également pratique. Pour la copie et le transfert de fichiers à grande vitesse, vous pouvez également profiter de la classe java.nio et FileChannel, mais sachez qu’il existe un bogue dans Windows qui vous empêche de transférer plus de 64 Go de données de canal.
Merci d’avoir lu cet article. Si vous l’aimez, partagez-le avec vos amis et collègues. Si vous avez des questions ou des commentaires, veuillez laisser une note.