1. 程式人生 > >Java中如何使用隨機存取檔案RandomAcessFile類?

Java中如何使用隨機存取檔案RandomAcessFile類?

 InputStreamOutputStream都只是單方面的讀和寫檔案的內容,如果有隨機的讀取和寫入檔案內容的需要那該怎麼辦?

Java為我們提供了一個RandomAcessFile類,它就是專門用來隨機存取檔案的內容的。

  RandomAcessFile操作檔案內容的時候,就好像操作一塊記憶體區域一樣。把位元組用下標數字來進行定位,通過呼叫RandomAcessFileAPI方法,把指標的指向進行一定,達到隨機存取資料的目的,主要的方法如下:

length()  得到檔案內容的位元組長度

seek()    設定到此檔案開頭測量到的檔案指標偏移量,在該位置發生下一個讀取或寫入操作。

read()和

write() 讀取和寫入位元組資料

以下是將檔案中的所有字母a換成字母的c的示例程式。

public class Test5 {

	public static void main(String[] args) {
		try {
			//建立隨機讀取檔案物件
			RandomAccessFile file=new RandomAccessFile("D://1.txt", "rw");
			//遍歷file的位元組的資料
			try {
				for (int i = 0; i < file.length(); i++) {
					byte b=(byte) file.read();//read()方法讀取一個位元組
					char c=(char) b;//轉換成char型別
					if(c=='a'){
						file.seek(i);
						file.write('c');//這個位置寫入新的字元
					}
				}
				file.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

說明:RandomAcessFile的大多數方法都會丟擲IOException,以上示例程式只是簡單的try-catch,而在實際的開發中,應該針對不同的情況,不同的異常做出不同的響應。

總結:

RandomAcessFile的使用思路主要包括以下一些專案:

1.length()方法獲取檔案的內容長度

2.seek()方法隨機的到達任何需要儲存資料的地方

3.呼叫read()方法獲取當前位置的資料,用write()方法寫入資料

4.完成需要後,調研close方法關閉檔案的開啟



相關推薦

Java如何使用隨機存取檔案RandomAcessFile

 InputStream和OutputStream都只是單方面的讀和寫檔案的內容,如果有隨機的讀取和寫入檔案內容的需要那該怎麼辦? Java為我們提供了一個RandomAcessFile類,它就是專門

java讀取Property檔案屬性工具

java中讀取Property配置檔案屬性工具類: import java.util.Locale; import java.util.MissingResourceException; import java.util.ResourceBundle; /** * 讀取Property配置檔

Java讀取大檔案的工具

超大檔案容易導致記憶體耗盡和重複讀取,怎麼辦?1、傳統的在記憶體中讀取這種方法帶來的問題是檔案的所有行都被存放在記憶體中,當檔案足夠大時很快就會導致程式丟擲OutOfMemoryError 異常。2、檔案流使用java.util.Scanner類掃描檔案的內容,一行一行連續地

File的特點?如何建立File物件?Java如何操作檔案內容,什麼是Io流Io流如何讀取和寫入檔案?位元組緩衝流使用原則?

                            重難點提示                                 學習目標 1、能夠了解File類的特點(存在的意義,構造方法,常見方法) 2、能夠了解什麼是IO流以及分類(IO流的概述以及分類)

java的基本數據型存放位置

兩個 內存地址 及其 java 原因 成員變量 調用 變量名 引用變量 一:在方法中聲明的變量,即該變量是局部變量,每當程序調用方法時,系統都會為該方法建立一個方法棧,其所在方法中聲明的變量就放在方法棧中,當方法結束系統會釋放方法棧,其對應在該方法中聲明的變量隨著棧的銷毀

Java接口和抽象的比較

系列 分享 space 日誌信息 pub 指向 相關 最好的 就會 Java中接口和抽象類的比較-2013年5月寫的讀書筆記摘要 1. 概述 接口(Interface)和抽象類(abstract class)是 Java 語言中支持抽象類的兩種機制,是

java為什麽實體需要實現序列化

color 客戶端訪問 tro 我們 str 操作 bsp div zab 當客戶端訪問某個能開啟會話功能的資源,web服務器就會創建一個HTTPSession對象,每個HTTPSession對象都會占用一定的內存,如果在同一個時間段內訪問的用戶太多,就會消耗大量的服務器

java隨機生成一個無序且長度不大於10的字符串

image ack con 技術 exti pen collect tint span package xiangmu; import java.util.ArrayList; import java.util.Collections; import java.ut

JAVA使用MD5加密工具實現對數據的加密處理

歸納 ssa utf int 控制 nic this com nod 1.MD5工具類 package com.ssm.util; import java.security.MessageDigest; public class MD5Util { //將字

Java的並發工具

down ont not 調用 遺傳 數據庫連接 所有 線程 latch 1、等待多線程完成的CountDownLatch CountDownLatch允許一個或多個線程等待其他線程完成操作。join用於讓當前執行線程等待join線程執行結束。其實

重溫java的String,StringBuffer,StringBuilder

nbsp times 優勢 不變 () 網絡 rgb final 線程不安全 不論什麽一個系統在開發的過程中, 相信都不會缺少對字符串的處理。 在 java 語言中, 用來處理字符串的的類經常使用的有 3 個: String、StringBuffer、St

JAVA分為基本數據型和引用數據型區別

zha ole ble 雙精度 全局變量 直接 布爾類型 周期 裏的 一、基本數據類型: byte:Java中最小的數據類型,在內存中占8位(bit),即1個字節,取值範圍-128~127,默認值0 short:短整型,在內存中占16位,即2個字節,取值範圍-32768~3

Java最常用的集合框架之 HashMap

tor nbsp 兩種 lca 元素 adf boolean 線程 進行 一、HashMap的概述 HashMap可以說是Java中最常用的集合類框架之一,是Java語言中非常典型的數據結構。 HashMap是基於哈希表的Map接口實現的,此實現

JAVA分為基本數據型及引用數據型(問題:堆和棧的區別,系統根據什麽區分堆棧內存)

復雜 復合 小寫 name 布爾 語言 內存空間 結構 抽象 一、基本數據類型: byte:Java中最小的數據類型,在內存中占8位(bit),即1個字節,取值範圍-128~127,默認值0 short:短整型,在內存中占16位,即2個字節,取值範圍-32768~32717

Java的基本數據型及其封裝

實例化 too shadow color ant 基本類 實用 anti 泛型 Java中的數據類型有兩種,基本數據類型和引用數據類型,引用數據類型的創建是需要去new一個對象,該對象的內存分配在堆區,同時棧區會保存一個指向該對象的引用,但是對於一些簡單數據的創建,

Java什麽是實體和實體的作用

Java實體類實體類是在JAVA軟件開發中廣泛使用的概念。 但是網上少有講清楚到底是什麽的。本期我來講一講什麽是實體類。 首先,直觀的看:實體類就是一個擁有Set和Get方法的類。實體類通常總是和數據庫之類的(所謂持久層數據)聯系在一起。這種聯系是借由框架(如Hibernate)來建立的。其次說定義(比較生澀

JAVA的BigInteger與BigDecimal功能強大

取余 並且 log 加減乘除 value java 構造函數 () eof BigInteger類是java為了處理大數字二專門制作的類,可以處理很大的數字(理論上無限大),並且可以實現大數字的類似於int所有數學運算。對算法題來說,再也不怕出現超出int範圍的運算了! 同

java小數處理,bigDecimal應用

add opened 對象 spl eof 轉換成 () double ply 1、構造一個BigDecimal對象: 1 //創建一個BigDecimal對象,初始化必須使用字符串,因為用數值初始化會得到近似值,不準確 2 BigDec

java反射:加載的構造方法

lan iat abc private out exc @override 私有 try java中反射:加載類的構造方法 package com.ma.reflection; import java.lang.reflect.Constructor; import j

JAVA接口與抽象

rac 構造 轉換 希望 就是 pub 成員變量 類型 規則 抽象類總結 抽象類的概念:是使用關鍵字abstract修飾的類就是抽象類; 抽象類的產生:當多個不能相互繼承的類具有相同的功能時,就需要將共同的信息向上抽取,放到公共的父類中;如果公共的父類只能描述所有子類都