鍍金池/ 教程/ Java/ Java隨機訪問文件
Java文件屬性
Java FilePermission示例
Java Externalizable實例
Java文件操作
Java文件鎖
Java文件系統(tǒng)
Java異步I/O
Java Reader/Writer
Java File實例
Java FileReader示例
Java控制臺
Java文件所有者權(quán)限
Java通道
Java ByteArrayOutputStream示例
BufferedOutputStream示例
Java FileInputStream示例
Java DataInputStream
Java BufferedInputStream
Java Jar Manifest
Java Console類示例
BufferedWriter示例
Java輸入/輸出教程
Java對象序列化
Java文件教程
Java DataInputStream類型
Java Zip字節(jié)數(shù)組
Java FileWriter示例
FileOutputStream示例
Java PrintStream
Java Scanner類
BufferedInputStream示例
Java字符集
ByteArrayInputStream示例
Java路徑操作
Java DataOutputStream
Java符號鏈接
Java FilterWriter示例
Java Jar API
BufferedReader實例
Java Pipe(管道)
Java jar文件
Java CharArrayReader示例
Java CharArrayWriter示例
Java PushbackInputStream
Java FilterReader示例
Java zip文件
Java InputStream
Java標(biāo)準(zhǔn)輸入/輸出/錯誤流
Java文件內(nèi)容和讀寫
Java FilterInputStream示例
Java內(nèi)存通道
Java路徑
Java令牌和字符串拆分
Java隨機訪問文件
Java文件樹
Java緩沖區(qū)讀寫
Java FileOutputStream
Java目錄事件
Java FilterOutputStream示例
Java DataOutputStream實例
FileDescriptor示例

Java隨機訪問文件

使用隨機訪問文件,我們可以從文件讀取以及寫入文件。使用文件輸入和輸出流的讀取和寫入是順序過程。使用隨機訪問文件,可以在文件中的任何位置讀取或?qū)懭搿?br>RandomAccessFile類的一個對象可以進(jìn)行隨機文件訪問。可以讀/寫字節(jié)和所有原始類型的值到一個文件。

RandomAccessFile可以使用其readUTF()writeUTF()方法處理字符串。RandomAccessFile類不在InputStreamOutputStream類的類層次結(jié)構(gòu)中。

模式

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

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

讀和寫

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

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

隨機訪問文件具有文件指針,當(dāng)從其讀取數(shù)據(jù)或向其寫入數(shù)據(jù)時,文件指針向前移動。文件指針是下一次讀取或?qū)懭雽㈤_始的光標(biāo)。其值指示光標(biāo)與文件開頭的距離(以字節(jié)為單位)。

可以通過使用其getFilePointer()方法來獲取文件指針的值。當(dāng)創(chuàng)建一個RandomAccessFile類的對象時,文件指針被設(shè)置為零??梢允褂?code>seek()方法將文件指針設(shè)置在文件中的特定位置。

RandomAccessFile類的length()方法返回文件的當(dāng)前長度??梢酝ㄟ^使用其setLength()方法來擴展或截斷文件。

示例

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

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é)果。

0
Hello world!
1
Hello world!

上一篇:Java jar文件下一篇:Java Scanner類