日期:2014-05-16  浏览次数:20928 次

java关于RandomAccessFile类的使用
* RandomAccessFile是IO包的类,但是其自成一派,从Object直接继承而来。 只可以对文件进行操作,可以对文件进行读取和写入。
* 当模式为r是,当文件不存在时会报异常,当模式为rw时,当文件不存在时,会自己动创建文件,当文件已经存在时 不会对原有文件进行覆盖。

* RandomAccessFile有强大的文件读写功能,其内部是大型 byte[],可以通过seek(),getFilePointer()等方法操作的指针,方便对数据进行写入与读取。还可以对基本数据类型进行直接的读和写操作。

 * 用途举例:多线程下载设计

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

public class RandomAccessFileTest {

	/**
	 * RandomAccessFile是IO包的类,但是其自成一派,从基数中继承而来。 只可以对文件进行操作,可以对文件进行读取和写入。
	 * 当模式为r是,当文件不存在时会报异常,当模式为rw时,当文件不存在时,会自己动创建文件,当文件已经存在时 不会对原有文件进行覆盖。
	 * RandomAccessFile有强大的文件读写功能,其内部是大型
	 * byte数组,可以通过seek(),getFilePointer()等方法操作的指针,方便
	 * 对数据进行写入与读取。还可以对基本数据类型进行直接的读和写操作。
	 */
	public static void main(String[] args) {
		writeTest();
		readTest();
	}

	private static void readTest() {
		RandomAccessFile raf = null;
		try {
			//创建一个随机访问对象,且文件的访问模式为只读。
			//注意,一旦模式为只读,就不对其进行写入操作。
			raf = new RandomAccessFile("D:\\raf.txt", "r");
			//文件只读模式,写入操作将抛异常
			//raf.write("datou".getBytes());
			
			//可直接操作指针,灵活的访问内容
			raf.seek(12);
			byte b[] = new byte[4];
			raf.read(b);
			System.out.println(new String(b));
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if (raf != null)
					raf.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	private static void writeTest() {
		RandomAccessFile raf = null;
		try {
			//创建一个可读写的对象
			raf = new RandomAccessFile("D:\\raf.txt", "rw");
			//写入数据。 可直接操作指定基本数据类型的对象。
			raf.writeBytes("java hello");
			raf.writeInt(23);
			raf.writeBytes("where are you");
			raf.writeInt(22);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if (raf != null)
					raf.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

}