16.隨機訪問流
阿新 • • 發佈:2022-04-14
-
可以實現對一個檔案做讀寫的操作
-
可以訪問檔案的任意位置,不像其他流,只能按照小猴順序讀取
2.RandomAccessFile的三個核心方法
-
.RandomAccessFile(String name,String dome),name:確定檔案 dome:確定讀寫許可權,r或rw
-
seek(long a),定位流物件的讀寫位置,a:確定度讀寫位置距離檔案開頭的 位元組 個數
-
getFilePointer()獲得流的當前讀寫位置
3.基礎操作
3-1:讀寫資料
import java.io.RandomAccessFile;
public class Dome19 {
public static void main(String[] args) {
RandomAccessFile raf = null;
try {
//建立隨機訪問流物件
raf = new RandomAccessFile("d:/test.txt", "rw");
int[] arr = new int[]{10, 20, 30, 40, 50, 60, 70, 80, 90, 100};
//寫入資料
for (int i = 0; i < arr.length; i++) {
raf.writeInt(arr[i]);
}
//定位 讀取或寫入 的位置
raf.seek(4);
//列印輸出
for (int i = 0; i < arr.length-1; i++) {
System.out.print(raf.readInt() + "\t");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (raf != null) {
raf.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
3-2:隔一個讀一個
import java.io.RandomAccessFile;
public class Dome19 {
public static void main(String[] args) {
RandomAccessFile raf = null;
try {
//建立隨機訪問流物件
raf = new RandomAccessFile("d:/test.txt", "rw");
int[] arr = new int[]{10, 20, 30, 40, 50, 60, 70, 80, 90, 100};
//寫入資料
for (int i = 0; i < arr.length; i++) {
raf.writeInt(arr[i]);
}
//定位 讀取或寫入 的位置
raf.seek(0);
//列印輸出
for (int i = 0; i < arr.length; i+=2) {
raf.seek(i*4);
System.out.print(raf.readInt() + "\t");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (raf != null) {
raf.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
3-3:替換某個位置的資料
import java.io.RandomAccessFile;
public class Dome19 {
public static void main(String[] args) {
RandomAccessFile raf = null;
try {
//建立隨機訪問流物件
raf = new RandomAccessFile("d:/test.txt", "rw");
int[] arr = new int[]{10, 20, 30, 40, 50, 60, 70, 80, 90, 100};
//寫入資料
for (int i = 0; i < arr.length; i++) {
raf.writeInt(arr[i]);
}
//定位 讀取或寫入 的位置
raf.seek(0);
//列印輸出
for (int i = 0; i < arr.length; i += 2) {
raf.seek(i * 4);
System.out.print(raf.readInt() + "\t");
}
System.out.println();
//定位到要替換的位置
raf.seek(8);
//替換
raf.writeInt(45);
//列印輸出
for (int i = 0; i < arr.length; i += 2) {
raf.seek(i * 4);
System.out.print(raf.readInt() + "\t");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (raf != null) {
raf.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}