Java.io.RandomAccessFile

RandomAccessFile Java提供的对文件内容的访问,既可以读文件,也可以写文件。支持随机访问文件,可以访问文件的任意位置。

1)Java文件模型

  在硬盘上的文件是byte byte byte存储的,是数据的集合。

2)打开文件

  有两种模式 rw 读写  r 只读。

  RandomAccessFile randomAccessFile=new RandomAccessFile(file, "rw");

  文件指针,打开文件时指针在开头 pointer=0。

3)写方法

  randomAccessFile.write('赵');//只写了一个字节,同时指针指向下一个位置,准备再次写入

4)读方法

  int b=randomAccessFile.read(...)读一个字节

5)文件读写完成后一定要关闭(Oracle官方说明)

 

package com.zhao.randomAccessFile;

import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Arrays;

public class RandomAccessFileDemo {

public static void main(String[] args) throws IOException {
File directory=new File("demo");
if (!directory.exists()) {
directory.mkdir();
}
File file=new File(directory, "raf.txt");
if (!file.exists()) {
file.createNewFile();
}
RandomAccessFile randomAccessFile=new RandomAccessFile(file, "rw");
//指针的位置
System.out.println(randomAccessFile.getFilePointer());

randomAccessFile.write('赵');//只写了一个字节
System.out.println(randomAccessFile.getFilePointer());
randomAccessFile.write('B');
System.out.println(randomAccessFile.getFilePointer());

int i=0x7ffffff;
//用write方法,每次只能写一个字节,如果把i写进去要写4次
randomAccessFile.write(i>>>24);//高8位
randomAccessFile.write(i>>>16);
randomAccessFile.write(i>>>8);
randomAccessFile.write(i);
System.out.println(randomAccessFile.getFilePointer());

//可以直接写一个i
randomAccessFile.writeInt(i);
System.out.println(randomAccessFile.getFilePointer());

String s="中";
byte[] bytes=s.getBytes("gbk");
randomAccessFile.write(bytes);
System.out.println(randomAccessFile.length());
System.out.println(randomAccessFile.getFilePointer());

//读文件,必须把指针移到头部
randomAccessFile.seek(0);
//一次性读取,把文件中的内容都读到字节数组中
byte[] bs=new byte[(int)randomAccessFile.length()];
randomAccessFile.read(bs);

System.out.println(Arrays.toString(bs));
String ss=new String(bs);
System.out.println(ss);

randomAccessFile.close();

}
}

 

 // Integer.toHexString(b&0xFF)把byte字节数组转换成十六进制。

posted @ 2016-04-03 15:50  假寐的我  阅读(355)  评论(0编辑  收藏  举报