2010-03-26 8 views
14

J'ai deux objets Java.io.File file1 et file2. Je veux copier le contenu de fichier1 à fichier2. Existe-t-il un moyen standard de le faire sans avoir à créer une méthode qui lit le fichier1 et écrit dans le fichier2java IO pour copier un fichier vers un autre

+4

Voir http://stackoverflow.com/questions/106770/standard-concise-way-to-copy-a-file-in-java – TwentyMiles

Répondre

24

Non, il n'existe pas de méthode intégrée pour cela. Le plus proche de ce que vous voulez accomplir est la méthode transferFrom de FileOutputStream, comme ceci:

FileChannel src = new FileInputStream(file1).getChannel(); 
    FileChannel dest = new FileOutputStream(file2).getChannel(); 
    dest.transferFrom(src, 0, src.size()); 

Et ne pas oublier de gérer les exceptions et tout près dans un bloc finally.

+3

Whoah. Tu m'as appris. –

+0

Une version plus complète (et correcte) de cette réponse est disponible ici: http://stackoverflow.com/questions/106770/standard-concise-way-to-copy-a-file-in-java/115086#115086. Merci à http://stackoverflow.com/users/92937/twentymiles pour la scolarisation de nous tous. – vkraemer

+0

Réponse complète et efficace: https://gist.github.com/mrenouf/889747 –

6

Non. Chaque programmeur Java de longue date a sa propre courroie utilitaire qui inclut une telle méthode. Voici la mienne.

public static void copyFileToFile(final File src, final File dest) throws IOException 
{ 
    copyInputStreamToFile(new FileInputStream(src), dest); 
    dest.setLastModified(src.lastModified()); 
} 

public static void copyInputStreamToFile(final InputStream in, final File dest) 
     throws IOException 
{ 
    copyInputStreamToOutputStream(in, new FileOutputStream(dest)); 
} 


public static void copyInputStreamToOutputStream(final InputStream in, 
     final OutputStream out) throws IOException 
{ 
    try 
    { 
     try 
     { 
      final byte[] buffer = new byte[1024]; 
      int n; 
      while ((n = in.read(buffer)) != -1) 
       out.write(buffer, 0, n); 
     } 
     finally 
     { 
      out.close(); 
     } 
    } 
    finally 
    { 
     in.close(); 
    } 
} 
+0

Pas copyFileToInputStream? –

+0

C'était un * extrait *. :) –

21

Si vous voulez être paresseux et s'enfuir avec l'écriture utilisation de code minimal FileUtils.copyFile(src, dest) d'Apache IOCommons

+1

C'est le chemin à parcourir! –

+1

Je suis fan du code minimal. Je ne sais pas pourquoi il est "paresseux" d'utiliser un paquet utilitaire. J'aime StringUtils. –

6

Depuis Java 7 vous pouvez utiliser Files.copy() à partir de la bibliothèque standard de Java.

Vous pouvez créer une méthode d'emballage:

public static void copy(String sourcePath, String destinationPath) throws IOException { 
    Files.copy(Paths.get(sourcePath), new FileOutputStream(destinationPath)); 
} 

qui peut être utilisé de la manière suivante:

copy("source.txt", "dest.txt"); 
0

Dans Java 7 vous pouvez utiliser Files.copy() et très important est: Do n'oubliez pas de fermer le OutputStream après avoir créé le nouveau fichier.

OutputStream os = new FileOutputStream(targetFile); 
Files.copy(Paths.get(sourceFile), os); 
os.close(); 
Questions connexes