java IO pour copier un fichier à un autre
Question
J'ai deux objets java.io.File fichier1 et fichier2. Je veux copier le contenu de fichier1 fichier2. Y at-il un moyen standard de faire cela sans avoir à me créer une méthode qui lit fichier1 et écrire à fichier2
La solution
Non, il n'y a pas de méthode intégrée pour le faire. Le plus proche de ce que vous voulez accomplir est la méthode transferFrom
de FileOutputStream
, comme suit:
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
.
Autres conseils
Si vous voulez être paresseux et s'enfuir avec l'écriture de code minimal utilisation
FileUtils.copyFile(src, dest)
d'Apache IOCommons
Non. Chaque long temps programmeur Java a sa propre ceinture utilitaire qui comprend une telle méthode. Voici le mien.
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();
}
}
Depuis Java 7 vous pouvez utiliser Files.copy()
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");
Java 7 vous pouvez utiliser Files.copy()
et très important est la suivante:. Ne pas oublier de fermer le OutputStream après la création du nouveau fichier
OutputStream os = new FileOutputStream(targetFile);
Files.copy(Paths.get(sourceFile), os);
os.close();
Ou utilisez Files.copy ( fichier1, fichier2) de la bibliothèque goyave de Google.