首頁 >Java >Java基礎 >java怎麼複製檔案?

java怎麼複製檔案?

尚
原創
2019-12-03 13:35:398840瀏覽

java怎麼複製檔案?

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn