Java拷貝文件的例子(使用channel實現)

如題,本代碼是通過使用JAVA中的Channel實現的拷貝文件的例子,代碼中的註釋已經比較清晰說明了其實現過程:


public static void main(String[] args) throws IOException {
 FileInputStream in = new FileInputStream(new File("./NioTestFile.txt"));
 FileChannel fileChannel = in.getChannel();// 源文件的通道

FileOutputStream out = new FileOutputStream(new File(
 "./NioTestFileNew.txt"));// copy文件的通道
 FileChannel fileChannelout = out.getChannel();

ByteBuffer buffer = ByteBuffer.allocate(50);// 緩衝區允許的最大容量

while (true) {
 buffer.clear();// 先清空上一次所寫進緩衝區的數據
 int r = fileChannel.read(buffer);// 讀取新的數據

System.out.println(r);// 把讀取的數組大小打印出來

if (r <= 0) {
 // r的值可以爲0或-1
 // 0:表示緩衝區的容量已滿,不能往bufer中寫數據了(因此把一部分數據copy完後,要將前面的clear掉)
 // -1:channel中的數據已經寫完
 System.out.println("read finished.");
 break;
 }

buffer.flip();// 可以理解爲"換"一個channel,此時相當於對緩衝區裏的所有數據"寫"向其他channel
 fileChannelout.write(buffer);// 向channel中寫入數據
 }

}


在Eclipse中運行的結果如下圖:

java拷貝文件的例子運行結果

java拷貝文件的例子運行結果

從打印出的信息可以看出來,50是表示緩衝區所讀取的最大容量,也就是代碼中ByteBuffer.allocate(50)所設置的,當讀取到數 據的最後一段時,該值必定小於50,如上面所打印的27,此時表示數據已經讀取完了,繼續讀取則會返回-1,因此,此時可以判斷數據已經讀取完了,可以把 數據流方向flip到另外一條channel中,實現”寫”的操作~~

本文簡單介紹了通過channel實現數據讀取和寫出(也就是實現”拷貝”)的過程,代碼非常簡單,僅供參考學習,有什麼問題請指出~

本文固定鏈接: http://www.sujunqiang.com/archives/174.html | 蘇駿強的博客

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章