主页 » 书柜 » RandomAccessFile

RandomAccessFile

2015-03-2810条评论

* 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();
}
}
}

}