标签:案例 pre 返回值 sys 分析 表示 java 方法 close
1. RandomAccessFile
Java提供了一个可以对文件随机访问的操作,访问包括读和写操作。该类名为RandomAccessFile。该类的读写是基于指针的操作。
1)文件访问模式
RandomAccessFile在堆文件进行随机访问操作时有两个模式,分为只读模式(只读取文件数据),和读写模式(对文件数据进行读写)。
在创建RandomAccessFile时,其提供的构造方法要求我们传入访问模式:
其中构造方法的第一个参数是需要访问的文件,而第二个参数则是访问模式:“r”字符串表示对该文件的访问是只读的;”rw“字符串表示对该文件的访问是读写模式。
2)字节数据读写操作
2.1)write(int d)方法
2.2)read()方法
案例1:write和read演示
import java.io.IOException;
import java.io.RandomAccessFile;
public class RandomAccessFile_writeAndread {
public static void main(String[] args) throws IOException {
RandomAccessFile raf = new RandomAccessFile("raf.txt","rw");
raf.write(24);
int x = raf.read();
System.out.println(x); //写完之后指针会停留在文件的最后一个字节位置,即文件末尾,所以读取的时候是-1
raf.seek(0); //将指针移动到开始位置
x = raf.read();
System.out.println(x);
raf.close();
}
}
/*
运行结果:
-1
24
*/
案例2:read超范围演示
import java.io.IOException;
import java.io.RandomAccessFile;
public class RandomAccessFile_writeAndread {
public static void main(String[] args) throws IOException {
RandomAccessFile raf = new RandomAccessFile("raf.txt","rw");
raf.write(264); //范围是0~255,超范围
raf.seek(0); //将指针移动到开始位置
int x = raf.read();
System.out.println(x);
raf.close();
}
}
/*
运行结果:
8
分析:因为read()方法会读取当前指针所在位置的一个字节(8位),264二进制的低8位是:00001000,所以指针从0开始读取到的是8
*/
2.3)write(byte[] d)方法
与该方法相似的还有一个常用方法:
2.4)read(byte[] b)方法
案例3:批量写入和读取演示
import java.io.IOException;
import java.io.RandomAccessFile;
public class RandomAccessFile_writeAndread {
public static void main(String[] args) throws IOException {
RandomAccessFile raf = new RandomAccessFile("raf.txt","rw");
String str = "你好,Java!";
byte[] date = str.getBytes(); //将字符串转换为字节
raf.write(date); //将字节写入文件
raf.seek(0); //将指针移动到初始位置
byte[] dateRead = new byte[100]; //创建字符串数组用于批量读取文件字节
int re = raf.read(dateRead);
System.out.println(re);
raf.close();
}
}
//运行结果:10
案例4:批量写入和读取演示2
import java.io.IOException;
import java.io.RandomAccessFile;
public class RandomAccessFile_write {
public static void main(String[] args) throws IOException {
RandomAccessFile raf = new RandomAccessFile("raf.txt","rw");
String str = "你好,Java!";
byte[] date = str.getBytes();
raf.write(date,0,4); //写入”你好“即4个字节
raf.seek(0);
byte[] dateRead = new byte[100];
int re = raf.read(dateRead);
System.out.println(re);
raf.close();
}
}
//运行结果:4
2.5)close()方法
2.6)getFilePointer方法
案例5:指针演示
import java.io.IOException;
import java.io.RandomAccessFile;
public class RandomAccessFile_writeAndread {
public static void main(String[] args) throws IOException {
RandomAccessFile raf = new RandomAccessFile("raf.txt","rw");
System.out.println(raf.getFilePointer()); //开始指针位置0
raf.write(‘A‘);
System.out.println(raf.getFilePointer()); //指针位置1
raf.writeInt(15); //与write()方法区别
System.out.println(raf.getFilePointer()); //指针位置5
raf.close();
}
}
/*
运行结果:
0
1
5
*/
2.7)seek方法
2.8)skipBytes方法
案例6:seek和skipBytes演示
import java.io.IOException;
import java.io.RandomAccessFile;
public class RandomAccessFile_writeAndread {
public static void main(String[] args) throws IOException{
RandomAccessFile raf = new RandomAccessFile("raf.txt","rw");
String str = "你好,Java!";
byte[] date = str.getBytes();
raf.write(date);
System.out.println(raf.getFilePointer());
raf.seek(0);
System.out.println(raf.getFilePointer());
raf.skipBytes(5);
System.out.println(raf.getFilePointer());
raf.close();
}
}
/*
运行结果:
10
0
5
*/
标签:案例 pre 返回值 sys 分析 表示 java 方法 close
原文地址:http://www.cnblogs.com/jmwm/p/6931307.html