Publié le 25/08/2010
Auteur axel
Réseaux sociaux
0 partages
0 tweets
0 plus
0 commentaires

Copier un fichier avec NIO

Lorsque Java 1.4 est sorti, un nouveau package a été fourni NIO qui permet entre autre de copier un fichier. La principale amélioration porte sur les performances par rapport à une copie avec deux FileStream et un tampon de copie.

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);

Ajouter un commentaire

Les champs marqués d'un * sont obligatoires, les adresses emails se sont pas publiées.

A lire aussi

Réseaux sociaux
Présentation de l'article
Catégorie
java - sources
Mise a jour
25/08/2010
Visualisation
vu 2341 fois
Public
Internaute
Auteur de la publication
Axel
Membre junior
Auteur de 51 articles
|BIO_PSEUDO|
Commentaires récents

Publié par Franzi dans java

Bonjour,
Le code est simple et compile, après être entré dans public void connect, il n'effectue pas this.session.get.transport et s'arrête. Sous eclipse avec Tomcat, j'ob...

Publié par Fokoneh dans java

Je teste d'abord, Je reviens

Publié par IANDRY dans tuto

c'est bien d'avoir les images et liste des pays du monde avec leurs drapeaux
respectif

Publié par sakhr dans tuto

merci b c pour les plusieurs tailles d'images

Publié par pacman dans java

thanks for sharing, that s great!