標籤:
在Java編程中,複製檔案的方法有很多,而且經常要用到。我以前一直是緩衝輸入輸出資料流來實現的(絕大多數人都是如此),近來在研究JDK文檔時發現,用檔案通道(FileChannel)來實現檔案複製竟然比用老方法快了近三分之一。下面我就來介紹一下如何用檔案通道來實現檔案複製,以及在效率上的對比
一. 用檔案通道的方式來進行檔案複製
/** * 使用檔案通道的方式複製檔案 * * @param s * 源檔案 * @param t * 複製到的新檔案 */ public void fileChannelCopy(File s, File t) { FileInputStream fi = null; FileOutputStream fo = null; FileChannel in = null; FileChannel out = null; try { fi = new FileInputStream(s); fo = new FileOutputStream(t); in = fi.getChannel();//得到對應的檔案通道 out = fo.getChannel();//得到對應的檔案通道 in.transferTo(0, in.size(), out);//串連兩個通道,並且從in通道讀取,然後寫入out通道 } catch (IOException e) { e.printStackTrace(); } finally { try { fi.close(); in.close(); fo.close(); out.close(); } catch (IOException e) { e.printStackTrace(); } } }
與普通的緩衝輸入輸出資料流的複製效率的對比
普通的緩衝輸入輸出資料流代碼:
測試代碼:
輸出結果:
由此可見,FileChannel複製檔案的速度比BufferedInputStream/BufferedOutputStream複製檔案的速度快了近三分之一。在複製大檔案的時候更加體現出FileChannel的速度優勢。而且FileChannel是多並發安全執行緒的。
原文:http://jingyan.baidu.com/article/ff4116259c2d7712e4823780.html
java copy file