* 當模式爲r是,當文件不存在時會報異常,當模式爲rw時,當文件不存在時,會自己動創建文件,當文件已經存在時 不會對原有文件進行覆蓋。
* RandomAccessFile有強大的文件讀寫功能,其內部是大型 byte[],可以通過seek(),getFilePointer()等方法操作的指針,方便對數據進行寫入與讀取。還可以對基本數據類型進行直接的讀和寫操作。
* 用途舉例:多線程下載設計
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
public class RandomAccessFileTest {
/**
* RandomAccessFile是IO包的類,但是其自成一派,從基數中繼承而來。 只可以對文件進行操作,可以對文件進行讀取和寫入。
* 當模式爲r是,當文件不存在時會報異常,當模式爲rw時,當文件不存在時,會自己動創建文件,當文件已經存在時 不會對原有文件進行覆蓋。
* RandomAccessFile有強大的文件讀寫功能,其內部是大型
* byte數組,可以通過seek(),getFilePointer()等方法操作的指針,方便
* 對數據進行寫入與讀取。還可以對基本數據類型進行直接的讀和寫操作。
*/
public static void main(String[] args) {
writeTest();
readTest();
}
private static void readTest() {
RandomAccessFile raf = null;
try {
//創建一個隨機訪問對象,且文件的訪問模式爲只讀。
//注意,一旦模式爲只讀,就不對其進行寫入操作。
raf = new RandomAccessFile("D:\\raf.txt", "r");
//文件只讀模式,寫入操作將拋異常
//raf.write("datou".getBytes());
//可直接操作指針,靈活的訪問內容
raf.seek(12);
byte b[] = new byte[4];
raf.read(b);
System.out.println(new String(b));
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (raf != null)
raf.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
private static void writeTest() {
RandomAccessFile raf = null;
try {
//創建一個可讀寫的對象
raf = new RandomAccessFile("D:\\raf.txt", "rw");
//寫入數據。 可直接操作指定基本數據類型的對象。
raf.writeBytes("java hello");
raf.writeInt(23);
raf.writeBytes("where are you");
raf.writeInt(22);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (raf != null)
raf.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}