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