web-dev-qa-db-fra.com

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

Je souhaite copier un fichier d'un emplacement à un autre en Java. 

Voici ce que j'ai jusqu'à présent:

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 copie pas le fichier, quel est le meilleur moyen de le faire?

46
vijayk

Vous pouvez utiliser this (ou toute variante):

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

De plus, je vous recommanderais d'utiliser File.separator ou / au lieu de \\ pour le rendre compatible sur plusieurs systèmes d'exploitation. Question/réponse sur ce disponible ici .

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

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

Pour déplacer une 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);
}
87
Menno

Utilisation de Stream

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

Utiliser un 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 d'Apache Commons IO lib:

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

Utilisation de Java SE 7 Files class:

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

Test de performance:  

    File source = new File("/Users/pankaj/tmp/source.avi");
    File dest = new File("/Users/pankaj/tmp/dest.avi");


    //copy file conventional way using Stream
    long start = System.nanoTime();
    copyFileUsingStream(source, dest);
    System.out.println("Time taken by Stream Copy = "+(System.nanoTime()-start));

    //copy files using Java.nio FileChannel
    source = new File("/Users/pankaj/tmp/sourceChannel.avi");
    dest = new File("/Users/pankaj/tmp/destChannel.avi");
    start = System.nanoTime();
    copyFileUsingChannel(source, dest);
    System.out.println("Time taken by Channel Copy = "+(System.nanoTime()-start));

    //copy files using Apache commons io
    source = new File("/Users/pankaj/tmp/sourceApache.avi");
    dest = new File("/Users/pankaj/tmp/destApache.avi");
    start = System.nanoTime();
    copyFileUsingApacheCommonsIO(source, dest);
    System.out.println("Time taken by Apache Commons IO Copy = "+(System.nanoTime()-start));

    //using Java 7 Files class
    source = new File("/Users/pankaj/tmp/sourceJava7.avi");
    dest = new File("/Users/pankaj/tmp/destJava7.avi");
    start = System.nanoTime();
    copyFileUsingJava7Files(source, dest);
    System.out.println("Time taken by Java7 Files Copy = "+(System.nanoTime()-start));

RÉSULTATS:  

/*
 * File copy:
 * Time taken by Stream Copy            = 44582575000
 * Time taken by Channel Copy           = 104138195000
 * Time taken by Apache Commons IO Copy = 108396714000
 * Time taken by Java7 Files Copy       = 89061578000
 */

Lien:

59

Utilisez les classes New Java File dans Java> = 7.

Créez la méthode ci-dessous et importez les bibliothèques nécessaires.

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

Utilisez la méthode créée comme ci-dessous dans main:

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.

Credits - @Scott: Une manière concise standard de copier un fichier en Java?

6
Amimo Benja
  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() );
        }
    }  
5
Quamber Ali

Files.exists ()

Files.createDirectory ()

Fichiers.copie ()

Remplacement de fichiers existants: Files.move () 

Fichiers.delete ()

Files.walkFileTree () entrez la description du lien ici

0
Shinwar ismail

Copier un fichier d'un emplacement à un autre signifie que vous devez copier l'intégralité du contenu vers 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 d'origine et l'emplacement cible qui est un nouvel emplacement de dossier avec le même type de fichier de destination . Chaque emplacement cible doit exister dans notre système, sinon nous devons créer un emplacement de dossier, puis créer un fichier portant le même nom que le nom de fichier d'origine. Ensuite, en utilisant la fonction de copie, nous pouvons facilement copier un fichier. fichier d'un endroit à l'autre.

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


            }
0
S.Sarkar