RandomAccessFile:对文件随机访问
2014-07-13 10:36
411 查看
1、前言
文件是什么:文件中存储的是数据
任何文件都是有byte数据组成的有序的数列
byte数据:是文件的最小(原子、不可在分)单位
2、创建对象
1)new RandomAccessFile(File file,String mode)2)new RandomAccessFile(String filename,String mode)
解析RandomAccessFile构造方法参数:第一个参数是需要访问的文件,而第二个参数则是访问模式
访问模式(mode) |--”r” 只读模式 若文件不存在,会抛FileNotFoundException (系统找不到指定文件)
|--”rw” 读写模式 若文件不存在,会自动创建
若设置为读写模式该文件的访问就是即可读又可写。
3、字节数据读写操作
2.1 、void write(int d)方法:该方法会根据当前指针所在位置写入一个字节。是将参数int的“低8位”写出。2.2、int read()方法:该方法会从文件中读取一个byte(8位)填充到int的低8位,高24位为0。返回值范围正 数:0~255。如果返回-1表示读取到了文件末尾!每次读取后自动移动文件指针,准备下次读取。
2.3、void write(byte[] d)方法:该方法会根据当前指针所在位置处连续写出给定数组中的所有字节。
2.4、void write(byte[] d,int offset,int len)方法:该方法会根据当前指针所在位置处连续写出给定数组中 的部分字节,这部分是从数组的offset的开始连续len个字节。
2.5、int read(byte[] b)方法:该方法会从指针位置处尝试最多读取给定数组的总长度,并从给定的字节数组第 一个位置开始,将读取到的字节顺序放置数组中,返回值为实际读取到的字节量。
2.6、close():RandomAccessFile在对文件访问的操作全部结束要调用close()方法来释放与其他关联的所有系 统资源。
/** 1)使用RandomAccessFile的write方法向文件raf.dat写入数字“1” */ /**2)使用RandomAccessFile的read方法从文件raf.dat中将数字“1”读取出来并打印到控制台 * @throws IOException */ @Test public void testWrite() throws IOException{ RandomAccessFile raf = new RandomAccessFile("raf.dat","rw"); //写出一个字节,写的是一个int值的低8位 raf.write(1);//(0000 0000 0000 0000 0000 0000) 0000 0001 省略前面24位 raf.write(-1);//(1111 1111 1111 1111 1111 1111)1111 1111 省略前面24位 raf.close(); } @Test public void testRead() throws IOException{ RandomAccessFile raf = new RandomAccessFile("raf.dat","r"); //读取一个字节 int d; while((d = raf.read())!=-1){ //1)d读取1: 0000 0000 0000 0000 0000 0000 0000 0001 读取raf中的一个字节 //赋值给int的型 前面就高24位就0填充。最终结果(10进制):1 //3)d读取-1: 0000 0000 0000 0000 0000 0000 1111 1111 。最终结果(10进制):255 System.out.println(d); //2)d读取1: 0000 0000 0000 0000 0000 0000 0000 0001 //若以(2进制)形式打印出来 前面的0省略。最终结果:1 //4)d读取-1: 0000 0000 0000 0000 0000 0000 1111 1111 。最终结果:1111 1111 System.out.println(Integer.toBinaryString(d)); } raf.close(); }
/**1)使用RandomAccessFile的write(byte[])方法向文件raf.dat写入字符串“HelloWorld”*/ /**2)使用RandomAccessFile的read(byte[])方法从文件raf.dat中将字符串“HelloWorld”取 * 出来并打印到控制台 * @throws IOException */ @Test public void testWriteByteArray() throws IOException{ RandomAccessFile raf = new RandomAccessFile("raf.dat","rw"); byte[] buf ="HelloWorld".getBytes(); raf.write(buf); raf.close(); } @Test public void testReadByteArray() throws IOException{ RandomAccessFile raf = new RandomAccessFile("raf.dat","r"); byte[] buf = new byte[10]; //len 最终值为读取的字节量 int len = raf.read(buf); System.out.println("读取到了 :"+len+"字节");//读取到了:10字节 System.out.println(new String(buf));//HelloWorld raf.close(); }
4、文件指针操作
3.1、long getFilePointe()方法:该方法获得当前RandomAccessFile指针位置,打开文件是默认指针位置在0。3.2、void seek(long pos)方法:该方法移动当前RandomAccessFile的指针位置。
3.3、int skipBytes(int n)方法:该方法跳过输入的n个字节以丢弃跳过的字节。此3方法不出EOFException
(文件结束异常)。返回结果是跳过实际字节数。如果n为负数,则不跳过任何字节。
@Test public void testGetFilePointer() { try { //创建RandomAccessFile 进行读写操作 RandomAccessFile raf = new RandomAccessFile("abc.txt","rw"); System.out.println(raf.getFilePointer());//0 raf.write('A');//'A' 占1个byte System.out.println(raf.getFilePointer());//1 raf.writeInt(3);//3 占4个byte System.out.println(raf.getFilePointer());//5 //将指针移动到文件开始处(第一个字节的位置) raf.seek(0); System.out.println(raf.getFilePointer());//0 //指针跳两个字节 raf.skipBytes(2); System.out.println(raf.getFilePointer());//2 //访问完文件,释放资源 raf.close(); } catch (FileNotFoundException e) { e.printStackTrace(); }catch(IOException e){ e.printStackTrace(); } }
相关文章推荐
- 随机访问文件 自身具备读写 的RandomAccessFile
- IO流--RandomAccessFile--随机访问文件
- 随机访问文件RandomAccessFile 与 内存映射文件MappedByteBuffer
- RandomAccessFile随机访问文件的读取和写入
- 随机访问文件RandomAccessFile 与 内存映射文件MappedByteBuffer
- java 管道流PipedInputStream,PipedInputStream和随机访问文件 RandomAccessFile
- RandomAccessFile 随机访问文件
- RandomAccessFile随机访问文件
- MappedByteBuffer高速缓存文件、RandomAccessFile随机访问
- JavaIO之RandomAccessFile随机访问文件
- RandomAccessFile随机访问分割文件
- JavaIO之RandomAccessFile随机访问文件
- Java 文件随机访问类-RandomAccessFile
- RandomAccessFile随机访问文件,可读可写
- Java之RandomAccessFile(随机访问文件)
- Java之文件的随机访问和读写RandomAccessFile
- [Java核心API]IO流--随机访问文件RandomAccessFile
- 随机访问文件的读取和写入对象:RandomAccessFileDemo
- Java中的随机访问文件流RandomAccessFile
- randomAccessFile随机文件