RandomAccessFile 用于随机访问文件,这里的随机是指可以自动由移动读取文件内容的指针/位置(position),实现可进可退,可跳跃的访问文件内容。不像流,只能向前读写。另外 RandomAccessFile 即支持读操作,也支持读操作。
RandomAccessFile 有多种访问文件的模式(mode ):
r -> 1 只读
rw -> 2 读写
rws -> 6 读写,同步更新内容或元数据到底层设备。
rwd -> 8 读写,同步更新内容到底层设备。
1、 构造方法:public RandomAccessFile(File file, String mode)
1)、文件路径合法校验。
2)、FileDescriptor -> 文件描述对象 -> useCount 占用计数 +1。
3)、private native void open(String name, int mode) -> 本地方法调用。
2、 获取 FileChannel :public final FileChannel getChannel()
1)、FileDescriptor -> 文件描述对象 -> useCount 占用计数 +1。
3、 获取1个字节,返回对应的 ASCII码(0~255),-1 则没有内容了 :public int read()
1)、private native int read0() -> 本地方法调用。
//使用read读取文件
int i;
while((i= aFile.read())>0){
System.out.print((char)i); // ASCII码 转 字符
}
4、 读取多个字节,返回读取到的字节数量,-1 则没有内容了: public int read(byte b[], int off, int len)
//使用read读取文件
int i=0;
int len=0;
byte[] b = new byte[10];
while((len = aFile.read(b,0,b.length)) != -1){
while(iout.print((char)b[i]);
i++;
}
i = 0;
}
5、 读取一行,返回下一行,null 则是最后一行 : public final String readLine()
6、 读写中文:
1)、public final void writeUTF(String str)
2)、public final String readUTF()
aFile.writeUTF("你好。\r\n");
aFile.writeUTF("我也好。");
String str = aFile.readUTF();
while(str != null){
System.out.println(str);
if (aFile.length() != aFile.getFilePointer()){
str = aFile.readUTF();
}else{
str = null;
}
}
7、 向前跳过多个字节,返回跳过的数量 : public int skipBytes(int n)
1)、public native void seek(long pos) –> 本地方调用。
8、 在当前的位置,写入1个字节(有则覆盖) : public void write(int b)
1)、private native void write0(int b) –> 本地方调用。
9、 在当前的位置,写入字节数组(有则覆盖): public void write(byte b[])
aFile.write(“1 “.getBytes());
10、在当前的位置,写入字节数组部分(有则覆盖) : public void write(byte b[], int off, int len)
aFile.write(“1 t”.getBytes(),0,2);
11、 获取当前的位置 : public native long getFilePointer()
12、 跳到特定位置 : public native void seek(long pos)
13、 获取文件的字节数(大小) : public native long length()
14、 设置只读取文件的长度,之后有内容都不读 : public native void setLength(long newLength)
15、 关闭文件 : public void close()
1)、关闭 channel , 文件描述对象 -> useCount 占用计数 -1。
2)、关闭文件,调用本地方法, 文件描述对象 -> useCount 占用计数 -1。