龙空技术网

java随机访问流RandomAccessFile

虚云幻仙 59

前言:

此刻小伙伴们对“java实现随机抽题”大约比较关心,朋友们都需要学习一些“java实现随机抽题”的相关资讯。那么小编也在网摘上收集了一些对于“java实现随机抽题””的相关知识,希望你们能喜欢,同学们快快来学习一下吧!

/**

* 测试随机访问流RandomAccessFile

* 对文件进行读写操作,不属于字节流/字符流,不同于字节/字符流的顺序读取,随机访问流可以通过指针对任意位置进行读写

*/

public class TestRandomAccessFile {

public static void main(String[] args) {

try(RandomAccessFile raf = new RandomAccessFile("iostream/testRandom.txt","rw")) {

//构造器传参(filename,mode)如果文件路径的某一级路径不存在会抛异常,如果上级路径存在但文件不存在会生成文件,文件存在时读取文件,不会覆盖成空文件。mode分为r只能读和rw可以读写两种权限

for (int i = 0;i<8;i++){

raf.writeInt((i+1)*10);

//随机访问流也可以存储基础数据类型,当不指定指针时默认从index=0开始,写入10-80八个int值

//随机访问流写入基础数据类型时使用自身的方法实现,没有通过数据流完成

}

//随机访问流没有flush()方法

raf.seek(4);

//.seek(long pos)调整指针,pos即position,pos每一位是一个字节byte

System.out.println(raf.readInt());

//结果为20,int类型需要占用4个字节,第一个int的10的pos从0-3,第二个int的20的pos从4-7,所以将指针移动到4进行.readInt()向后读取4个字节返回int的20

for (int i = 0;i<8;i+=2){

//隔一个数读一个数

raf.seek(i*4);

//i的值为0 4 8 12 16 20 24 28 对应每个int的第一个byte位,+=2时只为0 8 16 24

System.out.print(raf.readInt()+",");

//结果为10,30,50,70,

}

System.out.println();

raf.seek(8);

raf.writeInt(33);

//.write方法会从指针位置往后写入,如果有原始数据会覆盖,不会将数据后移

raf.seek(0);

for (int i = 0;i<8;i++){

System.out.print(raf.readInt()+",");

}

//结果为10,20,33,40,50,60,70,80, 30被覆盖为33

//System.out.print(raf.readInt()); 如果已经读完,再次调用.readInt()方法会抛java.io.EOFException

System.out.println(raf.read());

//在读完的情况下调用.read()会返回-1

System.out.println(raf.getFilePointer());

//.getFilePointer()返回指针当前位置,结果32

System.out.println(raf.length());

//.length()返回文件长度/大小/字节数,结果32

//文件内写入了8个int,每个int占4字节,所以文件大小为32字节,pos从0-31,执行了8次readInt()所以指针位置32到达文件末尾

raf.seek(8);

int insertInt = 30;

int temp;

long pos;

while ((pos = raf.getFilePointer()) < raf.length()){

temp = raf.readInt();

raf.seek(pos);

raf.writeInt(insertInt);

insertInt=temp;

}

raf.writeInt(insertInt);

raf.seek(0);

while (raf.getFilePointer()<raf.length()){

System.out.print(raf.readInt()+",");

}

} catch (FileNotFoundException e) {

throw new RuntimeException(e);

} catch (IOException e) {

throw new RuntimeException(e);

}

}

}

标签: #java实现随机抽题