88 votes

Comment copier un fichier d'un emplacement à un autre ?

Je veux copier un fichier d'un endroit à un autre en Java. Quelle est la meilleure façon de procéder ?


Voici ce que j'ai pour l'instant :

import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;
import java.util.List;
public class TestArrayList {
    public static void main(String[] args) {
        File f = new File(
            "D:\\CBSE_Demo\\Demo_original\\fscommand\\contentplayer\\config");
        List<String>temp=new ArrayList<String>();
        temp.add(0, "N33");
        temp.add(1, "N1417");
        temp.add(2, "N331");
        File[] matchingFiles = null;
        for(final String temp1: temp){
            matchingFiles = f.listFiles(new FilenameFilter() {
                public boolean accept(File dir, String name) {
                    return name.startsWith(temp1);
                }
            });
            System.out.println("size>>--"+matchingFiles.length);

        }
    }
}

Cela ne permet pas de copier le fichier. Quelle est la meilleure façon de procéder ?

150voto

Aquillo Points 3680

Vous pouvez utiliser cette (ou toute autre variante) :

Files.copy(src, dst, StandardCopyOption.REPLACE_EXISTING);

Je recommande également d'utiliser File.separator o / au lieu de \\ pour le rendre compatible avec plusieurs systèmes d'exploitation, question/réponse sur ce point disponible aquí .

Si vous ne savez pas comment stocker temporairement des fichiers, jetez un coup d'œil à la rubrique ArrayList :

List<File> files = new ArrayList();
files.add(foundFile);

Pour déplacer un List de fichiers dans un seul répertoire :

List<File> files = ...;
String path = "C:/destination/";
for(File file : files) {
    Files.copy(file.toPath(),
        (new File(path + file.getName())).toPath(),
        StandardCopyOption.REPLACE_EXISTING);
}

88voto

Alexander Sidikov Points 502

Mise à jour :

Voir aussi https://stackoverflow.com/a/67179064/1847899

Utilisation du flux

private static void copyFileUsingStream(File source, File dest) throws IOException {
    InputStream is = null;
    OutputStream os = null;
    try {
        is = new FileInputStream(source);
        os = new FileOutputStream(dest);
        byte[] buffer = new byte[1024];
        int length;
        while ((length = is.read(buffer)) > 0) {
            os.write(buffer, 0, length);
        }
    } finally {
        is.close();
        os.close();
    }
}

Utilisation du canal

private static void copyFileUsingChannel(File source, File dest) throws IOException {
    FileChannel sourceChannel = null;
    FileChannel destChannel = null;
    try {
        sourceChannel = new FileInputStream(source).getChannel();
        destChannel = new FileOutputStream(dest).getChannel();
        destChannel.transferFrom(sourceChannel, 0, sourceChannel.size());
       }finally{
           sourceChannel.close();
           destChannel.close();
       }
}

Utilisation de la librairie Apache Commons IO :

private static void copyFileUsingApacheCommonsIO(File source, File dest) throws IOException {
    FileUtils.copyFile(source, dest);
}

Utilisation de la classe de fichiers Java SE 7 :

private static void copyFileUsingJava7Files(File source, File dest) throws IOException {
    Files.copy(source.toPath(), dest.toPath());
}

Ou essayez Googles Guava :

https://github.com/google/guava

docs : https://guava.dev/releases/snapshot-jre/api/docs/com/google/common/io/Files.html

10voto

user3069161 Points 1

Utiliser les nouvelles classes de fichiers Java dans Java >=7.

Créer la méthode ci-dessous et importer les librairies nécessaires.

public static void copyFile( File from, File to ) throws IOException {
    Files.copy( from.toPath(), to.toPath() );
} 

Utiliser la méthode créée ci-dessous dans le cadre du programme principal :

File dirFrom = new File(fileFrom);
File dirTo = new File(fileTo);

try {
        copyFile(dirFrom, dirTo);
} catch (IOException ex) {
        Logger.getLogger(TestJava8.class.getName()).log(Level.SEVERE, null, ex);
}

NB:- fileFrom est le fichier que vous voulez copier dans un nouveau fichier fileTo dans un dossier différent.

Crédits - @Scott : Comment copier un fichier en Java ?

5voto

NSQuamber.java Points 2409
  public static void copyFile(File oldLocation, File newLocation) throws IOException {
        if ( oldLocation.exists( )) {
            BufferedInputStream  reader = new BufferedInputStream( new FileInputStream(oldLocation) );
            BufferedOutputStream  writer = new BufferedOutputStream( new FileOutputStream(newLocation, false));
            try {
                byte[]  buff = new byte[8192];
                int numChars;
                while ( (numChars = reader.read(  buff, 0, buff.length ) ) != -1) {
                    writer.write( buff, 0, numChars );
                }
            } catch( IOException ex ) {
                throw new IOException("IOException when transferring " + oldLocation.getPath() + " to " + newLocation.getPath());
            } finally {
                try {
                    if ( reader != null ){                      
                        writer.close();
                        reader.close();
                    }
                } catch( IOException ex ){
                    Log.e(TAG, "Error closing files when transferring " + oldLocation.getPath() + " to " + newLocation.getPath() ); 
                }
            }
        } else {
            throw new IOException("Old location does not exist when transferring " + oldLocation.getPath() + " to " + newLocation.getPath() );
        }
    }

2voto

S.Sarkar Points 59

Copier un fichier d'un emplacement à un autre signifie qu'il faut copier l'ensemble du contenu à un autre emplacement. Files.copy(Path source, Path target, CopyOption... options) throws IOException Cette méthode attend l'emplacement source qui est l'emplacement du fichier original et l'emplacement cible qui est l'emplacement d'un nouveau dossier avec comme destination le même type de fichier (que l'original). L'emplacement cible doit exister dans notre système, sinon nous devons créer un dossier et, dans ce dossier, créer un fichier portant le même nom que le fichier d'origine.

 public static void main(String[] args) throws IOException {
                String destFolderPath = "D:/TestFile/abc";
                String fileName = "pqr.xlsx";
                String sourceFilePath= "D:/TestFile/xyz.xlsx";
                File f = new File(destFolderPath);
                if(f.mkdir()){
                    System.out.println("Directory created!!!!");
                }
                else {
                    System.out.println("Directory Exists!!!!");
                }
                f= new File(destFolderPath,fileName);
                if(f.createNewFile())   {

                    System.out.println("File Created!!!!");
                }   else {
                    System.out.println("File exists!!!!");
                }

                Files.copy(Paths.get(sourceFilePath), Paths.get(destFolderPath, fileName),REPLACE_EXISTING);
                System.out.println("Copy done!!!!!!!!!!!!!!");

            }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X