BufferedInputStream示例
BufferedOutputStream示例
BufferedReader實例
BufferedWriter示例
ByteArrayInputStream示例
Java ByteArrayOutputStream示例
Java CharArrayReader示例
Java CharArrayWriter示例
Java Console類示例
Java DataInputStream類型
Java DataOutputStream實例
Java Externalizable實例
Java File實例
FileDescriptor示例
Java FileInputStream示例
FileOutputStream示例
Java FilePermission示例
Java FileReader示例
Java FileWriter示例
Java FilterInputStream示例
Java FilterOutputStream示例
Java FilterReader示例
Java FilterWriter示例
Java隨機訪問文件
使用隨機訪問文件,我們可以從文件讀取以及寫入文件。使用文件輸入和輸出流的讀取和寫入是順序過程。使用隨機訪問文件,可以在文件中的任何位置讀取或寫入。RandomAccessFile
類的一個對象可以進行隨機文件訪問。可以讀/寫字節和所有原始類型的值到一個文件。
RandomAccessFile
可以使用其readUTF()
和writeUTF()
方法處理字符串。RandomAccessFile
類不在InputStream
和OutputStream
類的類層次結構中。
模式
可以在四種不同的訪問模式中創建隨機訪問文件。訪問模式值是一個字符串。 它們列出如下:
模式
含義
「r」
文件以只讀模式打開。
「rw」
該文件以讀寫模式打開。 如果文件不存在,則創建該文件。
「rws」
該文件以讀寫模式打開。 對文件的內容及其元數據的任何修改就會立即被寫入存儲設備。
「rwd」
該文件以讀寫模式打開。 對文件內容的任何修改都會立即寫入存儲設備。
讀和寫
通過指定文件名和訪問模式來創建RandomAccessFile
類的實例。
RandomAccessFile raf = new RandomAccessFile("randomtest.txt", "rw");
隨機訪問文件具有文件指針,當從其讀取數據或向其寫入數據時,文件指針向前移動。文件指針是下一次讀取或寫入將開始的光標。其值指示光標與文件開頭的距離(以字節爲單位)。
可以通過使用其getFilePointer()
方法來獲取文件指針的值。當創建一個RandomAccessFile
類的對象時,文件指針被設置爲零。可以使用seek()
方法將文件指針設置在文件中的特定位置。
RandomAccessFile
類的length()
方法返回文件的當前長度。可以通過使用其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();
}
}
上面的代碼生成以下結果。
0
Hello world!
1
Hello world!