Java 檔案隨機讀寫流 RandomAccessFile
阿新 • • 發佈:2018-12-12
一.簡述
1、是JAVA I/O流體系中功能最豐富的檔案內容訪問類,它提供了眾多方法來訪問檔案內容。
2、由於可以自由訪問檔案的任意位置,所以如果需要訪問檔案的部分內容,RandomAccessFile將是更好的選擇。
3、可以用來訪問儲存資料記錄的檔案,檔案的記錄的大小不必相同,但是其大小和位置必須是可知的。
RandomAccessFile類中比較重要的2個方法
方法名 | 作用 |
getFilePointer() | 返回檔案記錄指標的當前位置 |
seek(long pos) | 將檔案記錄指標定位到pos的位置 |
二.使用方法
(1)java檔案模型 在硬碟上的檔案是byte byte儲存的是資料的集合 (2)開啟檔案 兩種模式 “rw”(讀寫) “r“(只讀) RandomAccessFile raf = new RandomAccessFile(file,"rw") 檔案指標,開啟檔案時指標在開頭pointer = 0 (3)寫方法 raf.write(int) ---> 只寫一個位元組(後八位),同時指標指向下一個位置,準備再次寫入 (4)讀方法 int b = raf.read() ---->讀一個位元組 (5)關閉 檔案讀寫完成以後一定要關閉(Oracle 官方說明)
public static void main(String[] args) throws IOException { File demo = new File("demo"); if(!demo.exists()){ demo.mkdir(); } File file = new File(demo,"raf.dat"); if(!file.exists()){ file.createNewFile(); } RandomAccessFile raf = new RandomAccessFile(file,"rw"); //指標位置 System.out.println(raf.getFilePointer()); //只寫了一個位元組 raf.write('A'); System.out.println(raf.getFilePointer()); raf.write('B'); int i = 0x7fffffff; /** * 用write方法每次只能寫一個位元組,如果要把i寫進去就得寫4次 */ raf.write(i >>> 24); raf.write(i >>> 16); raf.write(i >>> 8); raf.write(i ); System.out.println(raf.getFilePointer()); /** * writeInt 直接寫入 */ raf.writeInt(i); String s = "中"; byte[] gbk = s.getBytes("gbk"); raf.write(gbk); System.out.println(raf.length()); //讀檔案,必須把指標移到頭部 raf.seek(0); //一次性讀取,把檔案中的內容都讀到位元組陣列中 byte[] buf = new byte[(int)raf.length()]; raf.read(buf); System.out.println(Arrays.toString(buf)); raf.close(); }