Java復制文件的4種方式


盡管Java提供了一個可以處理文件的IO操作類。 但是沒有一個復制文件的方法。 復制文件是一個重要的操作,當你的程序必須處理很多文件相關的時候。 然而有幾種方法可以進行Java文件復制操作,下面列舉出4中最受歡迎的方式。 

 

1. 使用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)) > 0) { 
               output.write(buf, 0, bytesRead); 
           } 
    } finally { 
        input.close(); 
        output.close(); 
    } 
} 

正如你所看到的我們執行幾個讀和寫操作try的數據,所以這應該是一個低效率的,下一個方法我們將看到新的方式。 

 

2. 使用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(); 
    } 
} 

 

3. 使用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); 
} 

 

4. 使用Java7的Files類復制 

如果你有一些經驗在Java 7中你可能會知道,可以使用復制方法的Files類文件,從一個文件復制到另一個文件。 這是第四個方法的代碼: 

private static void copyFileUsingJava7Files(File source, File dest) 
        throws IOException {     
        Files.copy(source.toPath(), dest.toPath()); 
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM