1. 程式人生 > >Java RandomAccessFile檔案操作詳解

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域的方法。廢話不多說,現進入正題》》》 一、安裝域控伺服器 什麼是域控伺服器我就不多說了,請各位自行百度,安裝的教程在下面的連線裡