最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java使用RandomAccessFile類對文件進(jìn)行讀寫

 更新時間:2017年04月17日 15:52:51   作者:Joah  
本篇文章主要介紹了Java使用RandomAccessFile類對文件進(jìn)行讀寫,詳細(xì)的介紹了RandomAccessFile類的使用技巧和實例應(yīng)用,有興趣的可以了解一下

1. RandomAccessFile類簡介

前面一篇隨筆《File類遍歷目錄及文件》中有說到,F(xiàn)ile類只能用于表示文件或目錄的名稱、大小等信息,而不能用于文件內(nèi)容的訪問。而當(dāng)需要訪問文件內(nèi)容時,就可以用RandomAccessFile類了。

RandomAccessFile是Java提供用來訪問一些保存數(shù)據(jù)記錄的文件的類,可以進(jìn)行讀取操作,也可以進(jìn)行寫入操作,寫入的數(shù)據(jù)則以byte的形式存儲;支持隨機訪問,也就是可以訪問文件的任意位置(通過文件指針實現(xiàn))。

2. 構(gòu)造函數(shù)

RandomAccessFile(String name, String mode)
RandomAccessFile(File file, String mode)

兩個構(gòu)造函數(shù)用法非常相似,name、file都是用于指定打開的文件路徑和名稱,mode則是指定打開文件的方式,常用的參數(shù)有兩個"r"和"rw",也就是只讀和讀寫。

文件打開后,文件指針指向文件最開始,也就是pointer=0,可通過RandomAccessFile了的getFilePointer()方法查看。

范例: 創(chuàng)建并打開一個數(shù)據(jù)文件。

//創(chuàng)建目錄
File dir = new File("demo");
if (!dir.exists()) {
  dir.mkdir();
}
//創(chuàng)建文件
File file = new File(dir, "test.dat");
if (!file.exists()) {
  file.createNewFile();
}
//實例化RandomAccessFile對象
RandomAccessFile raf = new RandomAccessFile(file, "rw");
//打開文件時指針位置在最前,即0
System.out.println(raf.getFilePointer());

3. 寫入操作

write(int i)
write(byte[] b)
write(byte[] b, int off, int len)

第三個方法中的off為數(shù)組b中需要寫入的數(shù)據(jù)的起始索引值,len則是要寫入的長度。write方法每次寫入一個字節(jié),如果寫入的數(shù)據(jù)超過一個字節(jié),則寫入后八位(如果這里不太理解,可看看:二進(jìn)制運算基礎(chǔ))。

另外,每寫入一個字節(jié),文件指針指向下一個字節(jié)。

范例: 通過write()方法向文件中寫入一個整型數(shù)。(沿用上面例子創(chuàng)建的對象)

//write()方法每次只插入一個字節(jié),大于一個字節(jié)的則寫入后八位,因此寫入一個整型數(shù)需要寫入四次
int num = 28;
raf.write(num >>> 24);
raf.write(num >>> 16);
raf.write(num >>> 8);
raf.write(num);

當(dāng)然,RandomAccessFile類也提供了更簡便的方法writeXxx(),如果插入一個整型,可直接writeInt(i);,boolean的則為writeBoolean(),以此類推。但是要清楚的是,這些方法的還是通過上面的write()方法實現(xiàn)的。

范例: 以下為RandomAccessFile類中writeInt()方法的方法體。

public final void writeInt(int v) throws IOException {
  write((v >>> 24) & xFF);
  write((v >>> 16) & xFF);
  write((v >>> 8) & xFF);
  write((v >>> 0) & xFF);
  //written += 4;
}

4. 讀取操作

read(int i)
read(byte[] b)
read(byte[] b, int off, int len)

與寫入操作類似,讀取操作是通過read()方法實現(xiàn)的,每次讀取一個字節(jié),同時文件指針指向下一個位置(通過seek()方法將指針移到讀取位置)。同時,RandomAccessFile類也封裝了readXxx()系列方法用于簡便讀取,原理和使用方法可參考寫入操作,基本類似。

范例: 將數(shù)據(jù)文件中的所有數(shù)據(jù)以整型形式讀取出來。

//讀取文件,在讀取前需要通過seek()方法把文件指針移到最前
raf.seek(0);
for (int i = 0; i*4 < raf.length(); i++) {
  System.out.println(raf.readInt());
}

5. 關(guān)閉文件

打開的文件一定要通過close()關(guān)閉,否則可能會出現(xiàn)不可預(yù)料的錯誤。

6. 完整例子

import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;

public class MyRandomAccessFile {

  public static void main(String[] args) throws IOException {
    //創(chuàng)建目錄
    File dir = new File("demo");
    if (!dir.exists()) {
      dir.mkdir();
    }
    //創(chuàng)建文件
    File file = new File(dir, "test.dat");
    if (!file.exists()) {
      file.createNewFile();
    }
    
    //實例化RandomAccessFile對象
    RandomAccessFile raf = new RandomAccessFile(file, "rw");
    //打開文件時指針位置在最前,即0
    System.out.println(raf.getFilePointer());

    //寫入數(shù)據(jù)
    int[] num = {28, 14, 56, 23, 98};
    for (int i : num) {
      raf.writeInt(i);
    }
    
    //讀取文件,在讀取前需要通過seek()方法把文件指針移到最前
    raf.seek(0);
    for (int i = 0; i*4 < raf.length(); i++) {
      System.out.println(raf.readInt());
    }
    
    //操作結(jié)束后一定要關(guān)閉文件
    raf.close();
  }
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • java使用RandomAccessFile類基于指針讀寫文件實例代碼

    java使用RandomAccessFile類基于指針讀寫文件實例代碼

    這篇文章主要介紹了java使用RandomAccessFile類基于指針讀寫文件實例代碼,具有一定參考價值,需要的朋友可以了解下。
    2017-10-10
  • 基于javascript實現(xiàn)獲取最短路徑算法代碼實例

    基于javascript實現(xiàn)獲取最短路徑算法代碼實例

    這篇文章主要介紹了基于javascript實現(xiàn)獲取最短路徑算法代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02
  • 簡單驗證碼生成Java版

    簡單驗證碼生成Java版

    這篇文章主要為大家詳細(xì)介紹了簡單驗證碼生成Java版,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Mybatis各種查詢接口使用詳解

    Mybatis各種查詢接口使用詳解

    這篇文章主要介紹了Mybatis各種查詢接口使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-11-11
  • FineReport中自定義登錄界面的方法

    FineReport中自定義登錄界面的方法

    這篇文章主要介紹了 FineReport中自定義登錄界面的方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-03-03
  • SpringBoot依賴注入的詳細(xì)介紹、使用技巧

    SpringBoot依賴注入的詳細(xì)介紹、使用技巧

    在Spring Boot中,依賴注入是一項關(guān)鍵的特性,它通過容器來管理和注入應(yīng)用程序中的各種組件,本文介紹SpringBoot依賴注入的詳細(xì)介紹、使用技巧,感興趣的朋友一起看看吧
    2024-01-01
  • 如何處理器攔截器(HandlerInterceptor)

    如何處理器攔截器(HandlerInterceptor)

    這篇文章主要介紹了如何處理器攔截器(HandlerInterceptor)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Java?C++分別實現(xiàn)滑動窗口的最大值

    Java?C++分別實現(xiàn)滑動窗口的最大值

    這篇文章主要介紹了分別通過Java和C++實現(xiàn)滑動窗口最大值,即給定一個數(shù)組?nums?和滑動窗口的大小?k,請找出所有滑動窗口里的最大值。感興趣的可以了解一下
    2021-12-12
  • Java foreach相關(guān)原理及用法解析

    Java foreach相關(guān)原理及用法解析

    這篇文章主要介紹了Java foreach相關(guān)原理及用法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • Java中斷線程的方法

    Java中斷線程的方法

    這篇文章主要介紹了Java中斷線程的方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-05-05

最新評論

神农架林区| 博客| 邓州市| 正蓝旗| 贵南县| 灵寿县| 西宁市| 建宁县| 丹棱县| 拉萨市| 西林县| 边坝县| 高陵县| 山丹县| 辽中县| 龙州县| 伊川县| 龙胜| 聂拉木县| 新龙县| 广河县| 哈密市| 德庆县| 珲春市| 时尚| 景宁| 丹阳市| 寿阳县| 丹棱县| 肥乡县| 庐江县| 皮山县| 沽源县| 大余县| 攀枝花市| 宁国市| 温宿县| 杭锦旗| 潢川县| 长宁县| 托克逊县|