Java I/O---RandomAccessFile類(隨機訪問文件的讀取和寫入)

来源:https://www.cnblogs.com/zhuweiheng/archive/2017/12/30/8151262.html
-Advertisement-
Play Games

1.JDK API中RandomAccessFile類的描述 此類的實例支持對隨機訪問文件的讀取和寫入。隨機訪問文件的行為類似存儲在文件系統中的一個大型 byte 數組。存在指向該隱含數組的游標或索引,稱為文件指針;輸入操作從文件指針開始讀取位元組,並隨著對位元組的讀取而前移此文件指針。如果隨機訪問文件 ...


1.JDK API中RandomAccessFile類的描述

 

       此類的實例支持對隨機訪問文件的讀取和寫入。隨機訪問文件的行為類似存儲在文件系統中的一個大型 byte 數組。存在指向該隱含數組的游標或索引,稱為文件指針;輸入操作從文件指針開始讀取位元組,並隨著對位元組的讀取而前移此文件指針。如果隨機訪問文件以讀取/寫入模式創建,則輸出操作也可用;輸出操作從文件指針開始寫入位元組,並隨著對位元組的寫入而前移此文件指針。寫入隱含數組的當前末尾之後的輸出操作導致該數組擴展。該文件指針(實現數組隨機讀寫)可以通過 getFilePointer 方法讀取,並通過 seek 方法設置。

      通常,如果此類中的所有讀取常式在讀取所需數量的位元組之前已到達文件末尾,則拋出 EOFException(是一種 IOException)。如果由於某些原因無法讀取任何位元組,而不是在讀取所需數量的位元組之前已到達文件末尾,則拋出 IOException,而不是 EOFException。需要特別指出的是,如果流已被關閉,則可能拋出 IOException。

2.RandomAccessFile演示

  1 public class RandomAccessFileDemo {
  2 
  3 	/**
  4 	 * @代碼來自傳智播客
  5 	 * @param args
  6 	 * @throws IOException
  7 	 */
  8 	public static void main(String[] args) throws IOException {
  9 
 10 
 11 		/*
 12 		 * RandomAccessFile:
 13 		 * 特點:
 14 		 * 1,只能操作文件。
 15 		 * 2,既能讀,又能寫。
 16 		 * 3,維護了一個byte數組。內部定義了位元組流的讀取和寫入。
 17 		 * 4,通過對指針的操作可以實現對文件的任意位置的讀取和寫入。
 18 		 */
 19 
 20 
 21 //		writeFile();
 22 		readFile();
 23 	}
 24 
 25 	public static void readFile() throws IOException {
 26 
 27 		RandomAccessFile raf = new RandomAccessFile("tempfile\\random.txt", "r");
 28 
 29 		//隨機讀取,只要通過設置指針的位置即可。
 30 		raf.seek(8*1);
 31 
 32 		byte[] buf = new byte[4];
 33 		raf.read(buf);
 34 		String name = new String(buf);
 35 
 36 		int age = raf.readInt();
 37 
 38 		System.out.println(name+":"+age);
 39 
 40 		raf.close();
 41 
 42 
 43 
 44 	}
 45 
 46 	public static void writeFile() throws IOException {
 47 
 48 		//1,創建一個隨機訪問文件的對象。文件不存在,則創建,存在,則不創建不覆蓋。
 49 		RandomAccessFile raf = new RandomAccessFile("tempfile\\random.txt", "rw");
 50 
 51 		//2,寫入姓名和年齡。
 52 //		raf.write("張三".getBytes());
 53 //		raf.writeInt(97);//保證整數的位元組原樣性。
 54 //		raf.write("李四".getBytes());
 55 //		raf.writeInt(99);//保證整數的位元組原樣性。
 56 
 57 		//3,隨機寫入。
 58 		raf.seek(8);//設置指針的位置。
 59 		raf.write("王武".getBytes());
 60 		raf.writeInt(100);
 61 		System.out.println(raf.getFilePointer());
 62 
 63 		raf.close();
 64 
 65 
 66 	}
 67 
 68 }

2017-12-31 內容來自API和傳智播客

  


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.Properties類簡介 Properties類(Java.util.Properties),主要用於讀取Java的配置文件,各種語言都有自己所支持的配置文件,配置文件中很多變數是經常改變的,這樣做也是為了方便用戶,讓用戶能夠脫離程式本身去修改相關的變數設置。像Python支持的配置文件是.i ...
  • 簡單工廠又稱為靜態工廠方法(static factory method)模式,簡單工廠是由一個工廠來決定創建出哪一種個體的實現,在很多的討論中,簡單工廠做為工廠方法模式(Factory Method)的一個特殊案例出現. 這個模式封裝的變化點是什麼? 這是每一個模式都應該考慮的核心問題,一定要記得, ...
  • 偶然看見這樣一個案例,先上代碼: public class GenericAdd{ //泛型方法實現兩個數相加 public <T extends Number> double add(T t1, T t2){ double sum = 0.0; sum = t1.doubleValue() + t ...
  • MarkDown筆記 目的 寫這篇文章,一來是記錄一下,以備日後使用;二來是我看到網上很多關於MarkDown的語法總結得不是很全面。 語法 1.標題 標題有兩種表示方式,第一種是Atx,這是我見的最多的;第二種是Setext。下麵分別來介紹一下。 (1)Atx 使用 表示,和HTML的h1~h6標 ...
  • 讓我們先來預覽一下代碼運行效果吧: 首先分析163郵箱登陸頁面的網頁結構(按F12或單擊滑鼠右鍵選擇審查元素) 1、定位到登陸框(註意登錄框是一個iframe,如果不定位到iframe的話是無法找到之後的郵箱地址框和密碼輸入框的) 2、定位到郵箱地址框(name='email') 3、定位到密碼輸入 ...
  • C 語言的 static 關鍵字有三種(具體來說是兩種)用途: 1. 靜態局部變數:用於函數體內部修飾變數,這種變數的生存期長於該函數。 要明白這個用法,我們首先要瞭解c/c++的記憶體分佈,以及static所在的區間。 對於一個完整的程式,在記憶體中的分佈情況如下圖: 1.棧區: 由編譯器自動分配釋放 ...
  • 1排版 1 1相對獨立的程式塊之間、變數說明之後必須加空行。 示例:如下例子不符合規範。 if (!valid_ni(ni)) { ... // program code } repssn_ind = ssn_data[index].repssn_index; repssn_ni = ssn_dat ...
  • 本文主要介紹Spring中, 1 Bean 的 init-method 和 destroy-method 2 集合類型的裝配 3 註解方式裝配 4 以自動掃描把組件納入spring容器中管理 5 代理模式 一、Bean 的 init-method 和 destroy-method 以前在學Servl ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...