Java RandomAccessFile檔案操作詳解
簡介:
RandomAccessFile類可以對檔案隨機訪問的操作,訪問包括讀和寫操作。該類的讀寫是基於指標的操作。
RandomAccessFile對檔案進行隨機訪問操作時有兩個模式,一種是隻讀(r),另一種是讀寫(rw),需在建立RandomAccessFile物件時傳入一個引數進行設定,第一個引數代表要訪問的檔案,第二個引數代表設定訪問模式
RandomAccessFile(File file,String mode)
RandomAccessFile(String filename,String mode)
只讀模式: new RandomAccessFile(“filename”,”r”);
讀寫模式: new RandomAccessFile(filename,”rw”);
public static void main(String[] args) throws IOException {
//以讀寫方式開啟並寫入一行文字
File fis = new File("test.date");
RandomAccessFile raf = new RandomAccessFile(fis, "rw");
byte[] writeStr = "this is a demo!".getBytes();
raf.write(writeStr);
raf.close();
//以只讀方式開啟並讀取一行資料
RandomAccessFile rafRead = new RandomAccessFile("test.date", "r");
System.out.println(rafRead.readLine());
rafRead.close();
}
執行結果:
this is a demo!
RandomAccessFile常用方法彙總:
void write(int d)
該方法會根據當前指標所在位置處寫入一個位元組,是將引數int的”低8位”寫出
int read()
如果返回-1表示讀取到了檔案末尾EOF(EOF:End Of File)! 每次讀取後自動移動檔案指標, 準備下次讀取。
void write(byte[] d)
根據當前指標所在位置處連續寫出給定陣列中的所有位元組
void write(byte[] d,int offset,int len)
根據當前指標所在位置處連續寫出給定陣列中的部分位元組,這個部分是從陣列的offset處開始,連續len個位元組
int read(byte[] b)
從檔案中嘗試最多讀取給定陣列的總長度的位元組量,並從給定的位元組陣列第一個位置開始,將讀取到的位元組順序存放至陣列中,返回值為實際讀取到的位元組量
void close()
RandomAccessFile在對檔案訪問的操作全部結束後,要呼叫close()方法來釋放與其關聯的所有系統資源
public static void main(String[] args) throws IOException {
//以讀寫方式開啟並寫入一行文字
File fis = new File("test.dat");
RandomAccessFile rafw = new RandomAccessFile(fis, "rw");
byte[] writeStr = "this is a demo!\n".getBytes();
for(int i = 0; i < 10; i++) {
rafw.write(writeStr, 0, writeStr.length);
}
rafw.close();
//以只讀方式開啟test.dat
RandomAccessFile rafr = new RandomAccessFile(fis, "r");
byte[] rd = new byte[1024];
int len = -1;
//迴圈讀取,讀到結束後len被重新賦值為-1
while((len = rafr.read(rd))!= -1) {
System.out.println(new String(rd));
}
System.out.println("讀取結束,len="+len);
rafr.close();
}
執行結果:
this is a demo!
this is a demo!
this is a demo!
this is a demo!
this is a demo!
this is a demo!
this is a demo!
this is a demo!
this is a demo!
this is a demo!
讀取結束,len=-1
檔案指標操作:
RandomAccessFile的讀寫操作都是基於指標的,也就是說總是在指標當前所指向的位置進行讀寫操作。
long getFilePointer()
獲取當前指標位置
void seek(long pos)
使用該方法可以移動指標到指定位置。
int skipBytes(int n)
嘗試跳過輸入的 n 個位元組以丟棄跳過的位元組
實現檔案追加:
public static void main(String[] args) throws IOException {
RandomAccessFile raf = new RandomAccessFile("test.dat", "rw");
//將記錄指標移動到檔案最後 ,進行追加操作
raf.seek(raf.length());
raf.write("追加後的文字\n".getBytes());
raf.close();
}
執行後test.dat文字內容:
this is a demo!
this is a demo!
this is a demo!
this is a demo!
this is a demo!
this is a demo!
this is a demo!
this is a demo!
this is a demo!
this is a demo!
追加後的文字
總結:
RandomAccessFile,優點是可以控制指標的位置,對檔案進行指定位置的讀寫操作。
但是同時也有一些缺點,執行效率比較慢,大量進行指標控制操作很耗記憶體。
相關推薦
Java RandomAccessFile檔案操作詳解
簡介: RandomAccessFile類可以對檔案隨機訪問的操作,訪問包括讀和寫操作。該類的讀寫是基於指標的操作。 RandomAccessFile對檔案進行隨機訪問操作時有兩個模式,一種是隻讀(r),另一種是讀寫(rw),需在建立RandomAccess
python檔案操作詳解
檔案操作是程式設計中必不可少的,配置檔案,資料儲存都是對檔案操作;按檔案操作與格式主要內容如下圖: 檔案基本操作為開啟,讀取,寫入,關閉,我們按這個過程來詳解講解。 1.一個例子搞定開啟,讀取與關閉: 準備工作: 1>新建檔案:E:\workdir\readme.txt(或者自己準備一個其
C語言檔案操作詳解
* 檔案狀態檢查 A. 檔案結束 (1) 函式原型 int feof(FILE *fp) (2) 功能說明 該函式用來判斷檔案是否結束。 (3) 引數說明 fp:檔案指標。 (4) 返回值 0:假值,表示檔案未結束。 1:真值,表示檔案結束。
tensorflow gfile檔案操作詳解
一、gfile模組是什麼 gfile模組定義在tensorflow/python/platform/gfile.py,但其原始碼實現主要位於tensorflow/tensorflow/python/lib/io/file_io.py,那麼gfile模組主要功能是什麼呢?
C語言指標、連結串列與檔案操作詳解
用兩個函式 Load_LinkList() 和 Save_LinkList() 讓連結串列與檔案操作結合,除了列印函式,其他都是在記憶體中操作連結串列,這樣寫更有條理,在建立連結串列時沒有采用書上的用一箇中間變數引導,並插入到結點前面,而是直接在連結串列尾的next申請記憶
C語言,檔案操作詳解
在 C 語言中,檔案操作的函式大多包含在 標頭檔案中,使用時記得 #include。 一、開啟和關閉檔案 1. 開啟檔案 FILE * fopen ( const char * filename, const char * mode ); 開啟一個檔案,成功則返回
Linux檔案操作詳解(七)--資料夾的建立(mkdir命令)
一、mkdir命令簡介 mkdir命令用來建立目錄。該命令建立由dirname命名的目錄。如果在目錄名的前面沒有加任何路徑名,則在當前目錄下建立由dirname指定的目錄;如果給出了一個已經存在的路徑,將會在該目錄下建立一個指定的目錄。在建立目錄時,應保證新建
C# 檔案操作詳解(二)FileInfo類
本篇讓我們一起看一下FileInfo類如何使用。 FileInfo類 提供了與File類相同的功能,不同的是FileInfo提供的都是成員方法 1、讀檔案 1 2 3 4 //摘要:建立只讀 System.IO.FileStrea
C 和 C++ 檔案操作詳解
CPP 的檔案操作 在C++中,有一個stream這個類,所有的I/O都以這個“流”類為基礎的,包括我們要認識的檔案I/O,stream這個類有兩個重要的運算子: 1、插入器(<<) 向流輸出資料。比如說系統有一個預設的標準輸出
Android Studio——android中的檔案操作詳解以及內部儲存和外部儲存
原文連結:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2013/0923/1557.html 其實安卓檔案的操作和java在pc環境下的操作並無二致,之所以需要單獨講解是因為安卓系統提供了不同於
Windows DIB檔案操作詳解-1.DIB的讀入、儲存和顯示
DIB(裝置無關點陣圖)是儲存在磁碟上的點陣圖檔案,可以從磁碟讀到記憶體中或從記憶體儲存到磁碟上,它的磁碟檔案結構是標準化的,在Linux、Unix及Windows上都可以以同樣效果顯示。點陣圖是最接近硬體的影象格式,Windows顯示的核心是點陣圖,它的SDK API專門
iOS NSFileManager 檔案操作詳解
FileManager.h檔案: #import <Foundation/Foundation.h> @interface FileManager : NSObject +(BOOL)fileExistsAtPath:(NSString *)path;
Qt檔案操作詳解(建立、寫入、刪除、INI、XML檔案等)
1、建立資料夾 標頭檔案: #include <QDir> #include <QMessageBox> 核心程式碼如下: //例項QDir Q
Java對檔案讀寫的操作詳解
Java中檔案讀寫操作的作用是什麼?回答這個問題時應該先想到的是Java只是一門語言,我們的一種使用工具而已,這樣答案就明晰了,就是將外來的各種資料寫入到某一個檔案中去,用以儲存下來;或者從檔案中將其資料讀取出來,供我們使用。就如下電影過程,從網路資源中下載一部電影保存於你
Java 常用IO流操作詳解
字符集 -s fileinput 顯式 print OS 數值 重寫 目錄 1.基本概念 IO:Java對數據的操作是通過流的方式,IO流用來處理設備之間的數據傳輸,上傳文件和下載文件,Java用於操作流的對象都在IO包中。 2.IO流的分類 圖示:(主要IO流)
Linux基礎命令複習-操作檔案命令詳解
操作檔案命令詳解 建立檔案: touch -a 或--time=atime或--time=access或--time=use 只更改存取時間 -c 或--no-create 不建立任何文件 -d 使用指定的日期時間,而非現在的時間 -f 此引數將忽略不予處理,僅負責解決BSD版本to
iOS狂暴之路--兩種佈局方式操作詳解(xib檔案和程式碼編寫)
一、前言 在Android中我們進行佈局操作也是有兩種方式,一種是直接手寫xml佈局,還有一種就是用程式碼編寫,在iOS中其實也是類似,有兩種方式一種是xib檔案,一種程式碼編寫。本文就來介紹iOS開發中最麻煩的最常用的知識佈局內容。有了這些知識之後結合之前的講解的網路和多
Java實現的SFTP(檔案下載詳解篇)
上一篇講述了使用JSch實現檔案上傳的功能,這一篇主要講述一下JSch實現檔案下載的功能。並介紹一些SFTP的輔助方法,如cd,ls等。 同樣,JSch的檔案下載也支援三種傳輸模式:OVERWRITE, RESUME和APPEND,請參考上篇隨筆:JSch - Ja
Java中File檔案類詳解
File 類 File: 1.可以操作檔案 2.可以操作資料夾 3.可以操作檔案的路徑 File的靜態成員變數 獲取路徑分隔符 static String pa
使用JAVA控制AD域進行基本的操作詳解
前段時間,我接到了一個新任務:使用JAVA控制AD域進行基本的操作。經幾天摸索也看來多位博友的程式碼,現在摸索出了一套較為詳細的Java操控AD域的方法。廢話不多說,現進入正題》》》 一、安裝域控伺服器 什麼是域控伺服器我就不多說了,請各位自行百度,安裝的教程在下面的連線裡