Comment copier des fichiers en Java : (Recommandé : Tutoriel vidéo Java)
1. Utilisez FileStreams Copy
C'est la manière la plus classique de copier le contenu d'un fichier dans un autre. Utilisez FileInputStream pour lire les octets du fichier A et utilisez FileOutputStream pour écrire dans le fichier B. Voici le code de la première méthode :
private static void copyFileUsingFileStreams(File source, File dest) throws IOException { InputStream input = null; OutputStream output = null; try { input = new FileInputStream(source); output = new FileOutputStream(dest); byte[] buf = new byte[1024]; int bytesRead; while ((bytesRead = input.read(buf)) != -1) { output.write(buf, 0, bytesRead); } } finally { input.close(); output.close(); } }
Comme vous pouvez le voir, nous effectuons plusieurs opérations de lecture et d'écriture sur les données try, cela devrait donc être inefficace, comme nous le verrons dans la nouvelle méthode suivante .
2. Utilisez FileChannel pour copier
Java NIO inclut la méthode transferFrom, qui, selon la documentation, devrait être plus rapide que la copie de flux de fichiers. Voici le code de la deuxième méthode :
private static void copyFileUsingFileChannels(File source, File dest) throws IOException { FileChannel inputChannel = null; FileChannel outputChannel = null; try { inputChannel = new FileInputStream(source).getChannel(); outputChannel = new FileOutputStream(dest).getChannel(); outputChannel.transferFrom(inputChannel, 0, inputChannel.size()); } finally { inputChannel.close(); outputChannel.close(); } }
3. Utilisez Commons IO pour copier
Apache Commons IO fournit une méthode de copie de fichier dans sa classe FileUtils qui peut être utilisée pour copier un fichier vers un autre emplacement. Il est très pratique d'utiliser la classe Apache Commons FileUtils que vous utilisez déjà dans votre projet. Fondamentalement, cette classe utilise Java NIO FileChannel en interne. Voici le code de la troisième méthode :
private static void copyFileUsingApacheCommonsIO(File source, File dest) throws IOException { FileUtils.copyFile(source, dest); }
Le code de base de cette méthode est le suivant :
private static void doCopyFile(File srcFile, File destFile, boolean preserveFileDate) throws IOException { if (destFile.exists() && destFile.isDirectory()) { throw new IOException("Destination '" + destFile + "' exists but is a directory"); } FileInputStream fis = null; FileOutputStream fos = null; FileChannel input = null; FileChannel output = null; try { fis = new FileInputStream(srcFile); fos = new FileOutputStream(destFile); input = fis.getChannel(); output = fos.getChannel(); long size = input.size(); long pos = 0; long count = 0; while (pos < size) { count = size - pos > FILE_COPY_BUFFER_SIZE ? FILE_COPY_BUFFER_SIZE : size - pos; pos += output.transferFrom(input, pos, count); } } finally { IOUtils.closeQuietly(output); IOUtils.closeQuietly(fos); IOUtils.closeQuietly(input); IOUtils.closeQuietly(fis); } if (srcFile.length() != destFile.length()) { throw new IOException("Failed to copy full contents from '" + srcFile + "' to '" + destFile + "'"); } if (preserveFileDate) { destFile.setLastModified(srcFile.lastModified()); } }
On voit que le principe d'utilisation d'Apache Commons IO pour copier des fichiers est le deuxième méthode ci-dessus : utilisez la copie FileChannel
4. Utilisez la classe Files de Java7 pour copier
Si vous avez une certaine expérience en Java 7, vous Vous savez peut-être que vous pouvez utiliser la méthode de copie de fichier de la classe Files pour copier d'un fichier à un autre. Voici le code de la quatrième méthode :
private static void copyFileUsingJava7Files(File source, File dest) throws IOException { Files.copy(source.toPath(), dest.toPath()); }
Pour plus de connaissances sur Java, veuillez faire attention à la colonne Tutoriel de base Java.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!