使用NIO來操作檔案
JAVA的NIO主要用於對檔案的讀寫操作,效率也比普通IO要高一些。在對檔案的操作中,不但支援Byte格式的操作,還支援整數,浮點等基本型別的操作,非常方便。在對大檔案的操作中,其特有的檔案對映概念可以不用將整個檔案都讀入記憶體,就能夠對檔案的任意位置進行讀寫,非常的棒。下面我們就來簡單的看一下如何使用NIO來操作檔案。
NIO對檔案的理解與普通IO不同,它將檔案抽象為一個通道,也就是FileChannel,而不是流。程式設計師不能直接與FileChannel打交道,需要通過一個稱之為緩衝器的東西,也就是ByteBuffer來對通道進行讀寫。換句話說,通道和緩衝器是NIO中兩個非常重要的概念,正確的理解這兩個概念對學習使用
1、順序寫入文字檔案:
//構造一個檔案通道
FileChannel fc1 = new FileOutputStream("d://aa.txt").getChannel();
//使用wrap方法構造一個臨時緩衝器,專門用來儲存字串
fc1.write(ByteBuffer.wrap("hello world".getBytes()));
//不要忘記關閉檔案
fc1.close();
2、隨機寫入基本資料,如整數:
//構造隨機訪問的檔案通道
FileChannel fc2 = new RandomAccessFile("d://bb.txt", "rw").getChannel();
//構造緩衝器,需要指定大小,單位為Byte
ByteBuffer bb = ByteBuffer.allocate(1024);
//向緩衝器第4個位元組處寫入整數,若省略位置引數則表示0
bb.putInt(4, 65);
//將緩衝器的limit設定為實際大小,pos設為0,對緩衝器寫入操作結束後,必呼叫此方法。
bb.flip();
//將緩衝器的內容寫入到通道的偏移量為8的位置。
fc2.write(bb, 8);
//關閉通道
fc2.close();
3、隨機讀入基本資料:
FileChannel fc3 = new RandomAccessFile("d://bb.txt", "rw").getChannel();
ByteBuffer bb1 = ByteBuffer.allocate(1024);
fc3.read(bb1);
//再強調一遍,凡是對緩衝器進行了寫操作後,必呼叫此方法。
bb1.flip();
int x = bb1.getInt();
System.out.println(x);
4、使用檢視緩衝器:
就不詳細說了,只說說注意事項,對檢視緩衝器資料的修改,直接等價於對ByteBuffer的修改;但是,對檢視緩衝器pos、limit資訊的修改,不會影響到ByteBuffer的pos、limit,非常有必要手動設定ByteBuffer的pos、limit。
5、儲存器對映檔案:
//連通道都省了,直接建立一個對映緩衝器,與檔案的對映關係可以通過引數來設定。之後對這個緩衝器的任何操作都等同於對檔案的操作,操作方法同上,真是方便啊!!!!
MappedByteBuffer out = new RandomAccessFile("d://bb.txt", "rw").getChannel().map(FileChannel.MapMode.READ_WRITE, 0, 0xffffff);