java複製檔案的方法:(推薦:java影片教學)
一、使用FileStreams複製
這是最經典的方式將一個檔案的內容複製到另一個檔案中。使用FileInputStream讀取檔案A的位元組,使用FileOutputStream寫入到檔案B。這是第一個方法的程式碼:
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(); } }
正如你所看到的我們執行幾個讀和寫操作try的資料,所以這應該是一個低效率的,下一個方法我們將看到新的方式。
二、使用FileChannel複製
Java NIO包含transferFrom方法,根據文件應該比文件流複製的速度更快。這是第二種方法的程式碼:
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(); } }
三、使用Commons IO複製
Apache Commons IO提供拷貝檔案方法在其FileUtils類別,可用於複製一個檔案到另一個地方。它非常方便使用Apache Commons FileUtils類別時,您已經使用您的專案。基本上,這個類別是使用Java NIO FileChannel內部。這是第三種方法的程式碼:
private static void copyFileUsingApacheCommonsIO(File source, File dest) throws IOException { FileUtils.copyFile(source, dest); }
此方法的核心程式碼如下:
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()); } }
由此可見,使用Apache Commons IO複製檔案的原理就是上述第二種方法:使用FileChannel複製
四、使用Java7的Files類別複製
如果你有一些經驗在Java 7中你可能會知道,可以使用複製方法的Files類別檔案,從一個檔案複製到另一個檔案。這是第四個方法的程式碼:
private static void copyFileUsingJava7Files(File source, File dest) throws IOException { Files.copy(source.toPath(), dest.toPath()); }
更多java知識請關注java基礎教學欄位。
以上是java怎麼複製檔案?的詳細內容。更多資訊請關注PHP中文網其他相關文章!