RandomAccessFile
1、RandomAccessFile簡介
隨機流(RandomAccessFile)不屬於IO流,支援對檔案的讀取和寫入隨機訪問。
其原理是首先把隨機訪問的檔案物件看作儲存在檔案系統中的一個大型 byte 陣列,然後通過指向該 byte 陣列的游標或索引(即:檔案指標 FilePointer)在該陣列任意位置讀取或寫入任意資料。
2、RandomAccessFile的使用
(1)建立物件
RandomAccessFile raf = new RandomAccessFile(File file, String mode);
RandomAccessFile raf = new RandomAccessFile(String name, String mode);
(2)常用方法
getFileponiter()
返回檔案指標的位置seek(pos)
設定檔案指標的位置
(3)mode:4種模式
- "r": 以只讀的方式開啟 呼叫write方法會丟擲IOException
- "rw": 便於讀取和寫入
- "rws": 便於讀取和寫入,同時對檔案的內容和後設資料的更新都會同步儲存
到基礎儲存裝置 - "rwd": 便於讀取和寫入,同時對檔案的內容的更新都會同步儲存到基礎存
儲裝置
(4)例項使用
public static void main(String[] args) {
//隨機訪問檔案當中的某一部分資料
RandomAccessFile raf = null;
{
try {
raf = new RandomAccessFile("a.txt", "r");
//將檔案指標移動到指定位置
raf.seek(500);
byte[] buf = new byte[256];
int hasRead = 0;//真實讀取到的位元組數 <= buf.length
while((hasRead=raf.read(buf)) > 0){
System.out.println(new String(buf, 0, hasRead));
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
raf.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
(5)練習1&2
1、隨機訪問檔案當中的某一部分資料,列印出來500之後的資料
public static void main(String[] args) {
RandomAccessFile raf = null;
try {
raf =new RandomAccessFile("a.txt","rw");
raf.seek(500);
byte [] buffer =new byte[1024];
int temp = -1;
while ((temp=raf.read(buffer))!=-1){
System.out.println(new String(buffer,0,temp));
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
2、在指定位置追加"西安圖論軟體科技有限公司"
public class TestDemo {
public static void main(String[] args) {
RandomAccessFile raf = null;
File tmp = null;
FileInputStream fis = null;
FileOutputStream fos = null;
try {
tmp = File.createTempFile("tmp", null);
raf = new RandomAccessFile("a.txt", "rw");
//需要讓檔案指標移動到該位置
int pos = (int) (Math.random() * raf.length());
raf.seek(pos);
//複製指定位置之後的所有內容到tmp檔案中
fis = new FileInputStream(tmp);
fos = new FileOutputStream(tmp);
byte[] buf = new byte[256];
int hasRead = 0;
while ((hasRead = raf.read(buf)) > 0) {
fos.write(buf, 0, hasRead);
}
//在指定位置追加內容
raf.write("西安圖論軟體科技有限公司".getBytes());
//複製tmp檔案中的內容到該檔案之後
while ((hasRead = fis.read(buf)) > 0) {
raf.write(buf, 0, hasRead);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
raf.close();
fis.close();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
相關文章
- RandomAccessFile注意事項randomMac
- [Java]RandomAccessFile類詳解JavarandomMac
- Java IO2:RandomAccessFileJavarandomMac
- java RandomAccessFile類(隨機訪問檔案)JavarandomMac隨機
- Java I/O系統學習系列一:File和RandomAccessFileJavarandomMac
- [java IO流]之 隨機訪問檔案(RandomAccessFile類)Java隨機randomMac
- java中獲得檔案大小,用RandomAccessFile的lengh方法JavarandomMac
- Java的簡單理解(25)---(隨機訪問檔案)RandomAccessFileJava隨機randomMac
- Java斷點續傳(基於socket與RandomAccessFile的簡單實現)Java斷點randomMac
- 關於檔案讀寫使用RandomAccessFile類的一些簡單操作randomMac