(1) 创建随机访问文件

  • RandomAccessFilede构造方法如下:
    • 用文件名 public RandomAccessFile(String name,String mode);
    • 用文件对象 public RandomAccessFile(File file,String mode);

其中,mode参数决定了访问文件的权限,如只读’r’或读写’wr’等。
image.png

(2) 定位及读写访问

  • 在文件里移动指针:
    • long getFilePointer(); 返回当前指针
    • void seek(long pos); 将文件指针定位到一个绝对地址。地址是相对于文件头的偏移量。地址0表示文件的开头。
    • long length(); 返回文件的长度。
    • skipBytes(long i):从前往后拨弄指针的位置,就是跳过多少个字节读取数据。
  • 可以使用在DataInputStream 和DataOutputStream里出现的所有read()和write()方法。 ```java import java.io.*; class count{ public static void main(String args[]) {
    1. long count; //用来表示访问计数值
    2. try {
    3. RandomAccessFile fio = null;
    4. fio = new RandomAccessFile("log.txt", "rw");
    5. if (fio.length()==0) //新建文件夹的长度为0
    6. count=1L; //长整型,第一次访问
    7. else
    8. {
    9. fio.seek(0); //定位到文件首字节
    10. count = fio.readLong(); //读原来的计数值
    11. count=count+1L; //计数+1
    12. }
    13. fio.seek(0);
    14. fio.writeLong(count); //写入新的计数值
    15. fio.close();
    16. } catch (FileNotFoundException e) {
    17. e.printStackTrace();
    18. }catch(IOException e){
    19. e.printStackTrace();
    20. };
    } }
  1. ```java
  2. BufferedReader in=new BufferedReader(new InputStreamReader(System.in))};
  3. String s=in.readLine();
  4. RandomAccessFile myFile=new RandomAccessFile(“java.log”,”rw”);
  5. myFile.seek(myFile.length()); //将指针定到文件尾
  6. myFile.writeBytes(s+”\n”); //写入数据
  7. myFile.close();
  1. int data_arr[] = {12, 32, 43, 45, 1, 5};
  2. try
  3. {
  4. RandomAccessFile randf=new RandomAccessFile("temp.dat","rw");
  5. for(int i = 0; i < data_arr.length; i++){
  6. randf.writeInt(data_arr[i]);
  7. }
  8. for(int i = data_arr.length-1 ; i >= 0; i--){
  9. randf.seek(i * 4L); //int 数据占4个字节
  10. System.out.println(randf.readInt());
  11. }
  12. randf.close();
  13. }catch(IOException e){
  14. System.out.println("File access error" + e);
  15. }