Copier rapidement avec Java NIO
Exemple de copie du fichier fichiersource.txt vers un fichier fichierdest.txt. Une exception est générée si le fichier de destination existe déjà.
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.FileChannel;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* Copier un fichier avec NIO
* http://www.fobec.com/java/978/copier-fichier-avec-nio.html
* Axel 2010
*/
public class DiskTools {
public static void fileCopy(File infile, File outfile) throws IOException {
//Générer une exception si le fichier destination existe déjà
if (outfile.exists()) {
throw new IOException("Destination file already exists");
}
FileChannel inFileChannel = new FileInputStream(infile).getChannel();
FileChannel outFileChannel = new FileOutputStream(outfile).getChannel();
try {
// magic number for Windows, 64Mb - 32Kb)
int maxCount = (64 * 1024 * 1024) - (32 * 1024);
long size = inFileChannel.size();
long offset = 0;
while (offset < size) {
offset += inFileChannel.transferTo(offset, maxCount, outFileChannel);
}
} finally {
if (inFileChannel != null) {
inFileChannel.close();
}
if (outFileChannel != null) {
outFileChannel.close();
}
}
}
public static void main(String[] args) {
File filesrc=new File("c:fichiersource.txt");
File filedest=new File("c:fichierdest.txt");
try {
DiskTools.fileCopy(filesrc, filedest);
} catch (IOException ex) {
Logger.getLogger(DiskTools.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
note: Depuis 2010, la copie de fichier avec NIO a évolué vers la simplification. En effet, le wrapper proposé dans l'exemple ci-dessous est intégré de base dans le package.
par exemple, la copie de deux fichiers peut etre réalisée en 1 ligne de code:
Files.copy (pathSource, pathDest, StandardCopyOption.REPLACE_EXISTING);