java IO随机读写流

package com.io.file;

import java.io.IOException;
import java.io.RandomAccessFile;

/**
 * @类功能说明:该类不是IO体系中的,而是直接继承自Object
 * 但是它是IO包中的一员,因为他具备了读写能力
 * 内部封装了一个数组,可以通过指针对数组元素的操作
 * 可以通过getFilePointer获取指针的位置
 * 同时可以通过seek改变指针的位置
 * 
 * 其实完成读写的原理,就是内部封装了字节写入流和字节输出流
 * 通过构造函数可以看出,该类仅操作文件
 * 而且操作文件还有模式:r(只读),rw(读写)等
 * 
 * 如果模式为r,不会创建文件,会去读取一个文件,如果读不到,则抛出异常
 * 如果模式为rw,要操作的文件不存在,会创建,如果存在,则不会覆盖(写入数据的时候覆盖相应字节位置的数据)
 * @类修改者:
 * @修改日期:
 * @修改说明:
 * @作者:matieli
 * @创建时间:May 26, 2012 9:28:59 AM
 * @版本:V1.0
 * 
 */
public class RandomAccessFileDemo {
	public static void main(String[] args)throws IOException {
		//writeFile();
		//readFile();
		//writeFile_2();
	}
	public static void readFile()throws IOException{
		RandomAccessFile raf=new RandomAccessFile("ran.txt","r");
		//跳过“李四”,读取张三的信息
		//raf.seek(8);//当前例子中,名字和年龄各占4个字节
		
		raf.skipBytes(8);//通过掉过字节数的方式,不能向回读。
		
		byte[] b=new byte[4];//之前写入的都是按4字节写入的
		raf.read(b);
		String name=new String(b);
		System.out.println("名字是:"+name);
		int age =raf.readInt();
		System.out.println("年龄是:"+age);
		raf.close();
	}
	
	public static void writeFile_2()throws IOException{
		RandomAccessFile raf=new RandomAccessFile("ran.txt","rw");
		//控制写入的位置
		raf.seek(8*3);
		raf.write("王五".getBytes());
		raf.writeInt(103);//按int的4字节写入
		raf.close();
	}
	
	
	public static void writeFile()throws IOException{
		RandomAccessFile raf=new RandomAccessFile("ran.txt","rw");
		raf.write("李四".getBytes());
		raf.writeInt(97);//按int的4字节写入
		
		raf.write("张三".getBytes());
		raf.writeInt(99);//按int的4字节写入
		raf.close();
	}
}


猜你喜欢

转载自matieli.iteye.com/blog/1541687