摘要:字節數據讀寫操作方法提供了一個可以從文件中讀取字節的方法該方法會從當前指針位置讀取一個位填充到的低八位高位為返回值范圍正數如果返回表示讀取到了文件末尾每次讀取后自動移動文件指針準備下次讀取。
構建RandomAccessFile
Java提供了一個可以對文件隨機訪問的操作,訪問包括讀和寫操作。該類名為RandomAccessFile。該類的讀寫是基于指針的操作。
1. 只讀模式
RandomAccessFile在對文件進行隨機訪問操作時有兩個模式,分別為只讀模式(只讀取文件數據),和讀寫模式(對文件數據進行讀寫)。
只讀模式:
在創建RandomAccessFile時,其提供的構造方法要求我們傳入訪問模式:
RandomAccessFile(File file,String mode)
RandomAccessFile(String filename,String mode)
其中構造方法的第一個參數是需要訪問的文件,而第二個參數則是訪問模式:
r”:字符串”r”表示對該文件的訪問是只讀的。
2. 讀寫模式
創建一個基于文件訪問的讀寫模式的RandomAccessFile我們只需要在第二個參數中傳入”rw”即可
RandomAccessFile raf = new RandomAccessFile(file,”rw”);
那么這時在使用RandomAccessFile對該文件的訪問就是又可讀又可寫的。
字節數據讀寫操作
1. read()方法
RandomAccessFile提供了一個可以從文件中讀取字節的方法:
int read()
該方法會從RandomAccessFile當前指針位置讀取一個byte(8位) 填充到int的低八位, 高24位為0, 返回值范圍正數: 0~255, 如果返回-1表示讀取到了文件末尾EOF(EOF:End Of File)! 每次讀取后自動移動文件指針, 準備下次讀取。
2. read(byte[] d)方法
RandomAccessFile提供了一個可以從文件中批量讀取字節的方法:
int read(byte[] b)
該方法會從文件中嘗試最多讀取給定數組的總長度的字節量,并從給定的字節數組第一個位置開始,將讀取到的字節順序存放至數組中,返回值為實際讀取到的字節量 。
3. write(int d)方法
RandomAccessFile提供了一個可以向文件中寫出字節的方法:
void write(int d)
該方法會根據當前指針所在位置處寫入一個字節,是將參數int的”低8位”寫出。
4. write(byte[] d)方法
RandomAccessFile提供了一個可以向文件中寫出一組字節的方法:
void write(byte[] d)
該方法會根據當前指針所在位置處連續寫出給定數組中的所有字節,與該方法相似的還有一個常用方法:
void write(byte[] d,int offset,int len)
該方法會根據當前指針所在位置處連續寫出給定數組中的部分字節,這個部分是從數組的offset處開始,連續len個字節。
offset + len < 數組的長度
5. close方法
RandomAccessFile在對文件訪問的操作全部結束后,要調用close()方法來釋放與其關聯的所有系統資源。
void close()
例如:
RandomAccessFile raf = new RandomAccessFile(file,”rw”); …..//讀寫操作 raf.close();//訪問完畢后要關閉以釋放系統資源 /** * java.io.RandomAccessFile * 用于讀寫文件數據的類 * RAF讀寫文件數據總是在指針當前位置進行讀或寫, * 并且讀寫后指針是指向文件數據位置的標記(底層實現). * * @author soft01 * */ public class pm02_RandomAccessFile_write { public static void main(String[] args) throws IOException { /* * 第二個參數是讀寫模式,常用的有: * “r”:只讀模式,該模式要求讀取的文件必須存在 * “rw”:讀寫模式,該模式若文件不存在會自動創建 * read write */ RandomAccessFile raf = new RandomAccessFile("raf.dat","rw"); /* * void write(int d) * 向文件中寫入一個字節,寫的是給定的int值對應2進制的“低八位” * * vvvvvvvv * 00000000 00000000 000000000 00000001 * * 寫一個-1其實寫入的是 1111111 * 00000000 00000000 000000000 11111111 * */ raf.write(1); //0000001 System.out.println("寫出完畢"); //讀寫完畢最終要close raf.close(); } } /** * 讀取一個字節 * @author 高行行 * */ public class pm03_RandomAccessFile_read { public static void main(String[] args) throws IOException { RandomAccessFile raf = new RandomAccessFile("raf.dat","r"); /* * 讀取一個字節,并以int形式返回 * 若返回值為-1表示讀取到文件末尾 * 這里-1的二進制是11111111 111111111 111111111 11111111 * * 如果讀取的值是-1 * 讀取的二進制是1111111 * * read()方法 * 該方法會從RandomAccessFile當前指針位置讀取一個byte(8位) * 填充到int的低八位, * 高24位為0, 返回值范圍正數: 0~255, * 如果返回-1表示讀取到了文件末尾EOF(EOF:End Of File)! * 每次讀取后自動移動文件指針, 準備下次讀取。 */ int d = raf.read(); System.out.println(d); //1 //由于文件只有一個字節,再次讀寫會返回-1 d = raf.read(); //-1 System.out.println(d); raf.close(); } }/* Output: 1 -1 */
歡迎加入學習交流群569772982,大家一起學習交流。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/67700.html
摘要:,除了具有的特點外,這個模式要求對文件內容和文件元數據的每一個更新都會同步更新至底層的物理存儲。 RandomAccessFile概覽 對文件的讀取,既可以按順序,也可以以任意順序來讀取。RandomAccessFile提供這樣一種功能。其保存一個指向當前文件位置的指針,可以通過調整指針的位置,讀取一個文件中任意的內容。通過一段簡單的代碼來有個大體的認識: RandomAccessFi...
摘要:虛擬機讀取其他進程的數據對象的方法可以運行平臺上的其他程序該方法產生一個對象對象代表由該程序啟動啟動的子進程類提供如下三個方法用于和其子進程通信獲取子進程的錯誤流獲取子進程的輸入流獲取子進程的輸出流這里的輸入流輸出流容易混淆從程序的角度思考 Java虛擬機讀取其他進程的數據 Runtime對象的exec方法可以運行平臺上的其他程序,該方法產生一個Process對象,Process對象...
摘要:當使用節點流進行輸入輸出時,程序直接連接到實際的數據源,和時間的輸入輸出節點連接處理流則用于對一個已存在的流進行連接或封裝,通過封裝后的流來實現數據讀寫功能,處理流也被稱為高級流。 文件的編碼 文本文件就是字節序列,可以是任意編碼形式。在中文操作系統上直接創建文本文件,則該文本文件只能識別ANSI編碼,其他編碼方式會產生亂碼 package imooc.io; import java...
摘要:首先文件讀入輸出流常用有三種,,。可以看出和通道支持的解析流的方式是字節流。以后也可以穿著長袍問別人你知道讀寫文件的種方法么 之前在面試中被問到過兩次Java中文件讀入輸出怎么寫,當時只記得一個大概,沒有辦法很清晰的說出一個條理,今天特地看出總結了一下這方面的內容,想要寫出來給大家分享。 首先文件讀入輸出流常用有三種:FileInputStream/FileOutputStream,F...
摘要:通道可以異步讀寫。使用的方法讀取數據創建一個讀數據緩沖區對象從通道中讀取數據使用的方法寫入數據創建一個寫數據緩沖區對象寫入數據關閉完成使用后,您必須關閉它。五提供了一種被稱為的新功能,也稱為本地矢量。功能是通道提供的并不是。 歷史回顧: Java NIO 概覽 Java NIO 之 Buffer(緩沖區) 其他高贊文章: 面試中關于Redis的問題看這篇就夠了 一文輕松搞懂redis集...
閱讀 1761·2021-11-25 09:43
閱讀 1798·2021-11-24 10:41
閱讀 3115·2021-09-27 13:36
閱讀 822·2019-08-30 15:53
閱讀 3582·2019-08-30 15:44
閱讀 874·2019-08-30 14:03
閱讀 2584·2019-08-29 16:38
閱讀 1008·2019-08-29 13:23