Java 隨機(jī)訪問文件

2018-02-07 19:52 更新

Java IO教程 - Java隨機(jī)訪問文件


使用隨機(jī)訪問文件,我們可以從文件讀取以及寫入文件。

使用文件輸入和輸出流的讀取和寫入是順序過程。

使用隨機(jī)訪問文件,我們可以在文件中的任何位置讀取或?qū)懭搿?/span>

RandomAccessFile類的一個(gè)對(duì)象可以進(jìn)行隨機(jī)文件訪問。我們可以讀/寫字節(jié)和所有原始類型的值到一個(gè)文件。

RandomAccessFile可以使用其readUTF()和writeUTF()方法處理字符串。

RandomAccessFile類不在InputStream和OutputStream類的類層次結(jié)構(gòu)中。

模式

可以在四種不同的訪問模式中創(chuàng)建隨機(jī)訪問文件。訪問模式值是一個(gè)字符串。它們列出如下:

模式含義
"r"文件以只讀模式打開。
"rw"該文件以讀寫模式打開。 如果文件不存在,則創(chuàng)建該文件。
"rws"該文件以讀寫模式打開。 對(duì)文件的內(nèi)容及其元數(shù)據(jù)的任何修改立即被寫入存儲(chǔ)設(shè)備。
"rwd"該文件以讀寫模式打開。 對(duì)文件內(nèi)容的任何修改立即寫入存儲(chǔ)設(shè)備。

讀和寫

我們通過指定文件名和訪問模式來創(chuàng)建RandomAccessFile類的實(shí)例。

RandomAccessFile  raf = new RandomAccessFile("randomtest.txt", "rw");

隨機(jī)訪問文件具有文件指針,當(dāng)我們從其讀取數(shù)據(jù)或向其寫入數(shù)據(jù)時(shí),該文件指針向前移動(dòng)。

文件指針是我們下一次讀取或?qū)懭雽㈤_始的光標(biāo)。

其值指示光標(biāo)與文件開頭的距離(以字節(jié)為單位)。

我們可以通過使用其getFilePointer()方法來獲取文件指針的值。

當(dāng)我們創(chuàng)建一個(gè)RandomAccessFile類的對(duì)象時(shí),文件指針被設(shè)置為零。

我們可以使用seek()方法將文件指針設(shè)置在文件中的特定位置。

RandomAccessFile的length()方法返回文件的當(dāng)前長度。我們可以通過使用其setLength()方法來擴(kuò)展或截?cái)辔募?br />


例子

以下代碼顯示如何使用RandomAccessFile對(duì)象讀取和寫入文件。

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

public class Main {
  public static void main(String[] args) throws IOException {
    String fileName = "randomaccessfile.txt";
    File fileObject = new File(fileName);

    if (!fileObject.exists()) {
      initialWrite(fileName);
    }
    readFile(fileName);
    readFile(fileName);
  }

  public static void readFile(String fileName) throws IOException {
    RandomAccessFile raf = new RandomAccessFile(fileName, "rw");
    int counter = raf.readInt();
    String msg = raf.readUTF();

    System.out.println(counter);
    System.out.println(msg);
    incrementReadCounter(raf);
    raf.close();
  }

  public static void incrementReadCounter(RandomAccessFile raf)
      throws IOException {
    long currentPosition = raf.getFilePointer();
    raf.seek(0);
    int counter = raf.readInt();
    counter++;
    raf.seek(0);
    raf.writeInt(counter);
    raf.seek(currentPosition);
  }

  public static void initialWrite(String fileName) throws IOException {
    RandomAccessFile raf = new RandomAccessFile(fileName, "rw");
    raf.writeInt(0);
    raf.writeUTF("Hello world!");
    raf.close();
  }
}

上面的代碼生成以下結(jié)果。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)