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
Répondre
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
.
Whoah. Tu m'as appris. –
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
Réponse complète et efficace: https://gist.github.com/mrenouf/889747 –
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();
}
}
Pas copyFileToInputStream? –
C'était un * extrait *. :) –
Si vous voulez être paresseux et s'enfuir avec l'écriture utilisation de code minimal FileUtils.copyFile(src, dest)
d'Apache IOCommons
C'est le chemin à parcourir! –
Je suis fan du code minimal. Je ne sais pas pourquoi il est "paresseux" d'utiliser un paquet utilitaire. J'aime StringUtils. –
Ou utilisez Files.copy(file1,file2) de la bibliothèque goyave de Google.
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");
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();
Voir http://stackoverflow.com/questions/106770/standard-concise-way-to-copy-a-file-in-java – TwentyMiles