欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第17章: IO操作深入:课时83:RandomAccessFile

程序员文章站 2022-07-04 19:19:10
...

对于文件内容的处理操作主要是通过InputStream(Reader)、OutputStream(Writer)来实现,但是利用这些类实现的内容读取只能够将数据部分部分读取进来,如果说现在有这样一种要求。
现在给了你一个非常庞大的文件,这个文件的内容的大小有20G,如果此时按照传统的IO操作进行读取和分析根本就不可能完成,所以这种情况下在Java.io包里面就有一个RandomAccessFile类,这个类可以实现文件的跳跃式的读取,可以只读中间的部分内容(前提:需要有一个完善的保存形式),数据的保存位数要都确定好。
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第17章: IO操作深入:课时83:RandomAccessFile
RandomAccessFile类里面定义有如下的操作方法:
—构造方法:public RandomAccessFile(File file,String mode) throws FileNotFoundException;
——文件的处理模式:r、rw;

范例:实现文件的保存

package cn.mldn.demo;
import java.io.File;
import java.io.RandomAccessFile;
public class JavaAPIDemo {
    public static void main(String[] args) throws Exception {
    	File file = new File("d:" + File.pathSeparator + "mldn.txt"); // 定义操作文件
    	RandomAccessFile raf = new RandomAccessFile(file, "rw"); // 读写模式
    	String names [] = new String [] {"zhangsan","wangwu  ","lisi    "};
    	int ages [] = new int [] {30,20,16};
    	for (int x = 0; x < names.length; x++) {
			raf.write(names[x].getBytes()); // 写入字符串
			raf.writeInt(ages[x]);
		}
    	raf.close();
    }
}

RandomAccessFile最大的特点是在于数据的读取处理上,因为所有的数据是按照固定的长度进行的保存,所以读取的时候就可以进行跳字节读取:
向下跳:public int skipBytes(int n) throws IOException;
向回跳:public void seek(long pos) throws IOException。

范例:读取数据

package cn.mldn.demo;

import java.io.File;
import java.io.RandomAccessFile;

public class JavaAPIDemo {
    public static void main(String[] args) throws Exception {
    	File file = new File("d:" + File.pathSeparator + "mldn.txt"); // 定义操作文件
    	RandomAccessFile raf = new RandomAccessFile(file, "rw"); // 读写模式
    	{ // 读取“李四”的数据,跳过24位
    		raf.skipBytes(24);
    		byte [] data = new byte[8];
    		int len = raf.read(data);
    		System.out.println("姓名:" + new String(data,0,len).trim() + "、年龄:" + raf.readInt());
		}
    	{ // 读取“王五”的数据,回跳12位
    		raf.seek(12);
    		byte [] data = new byte[8];
    		int len = raf.read(data);
    		System.out.println("姓名:" + new String(data,0,len).trim() + "、年龄:" + raf.readInt());
		}
    	{ // 读取“张三”的数据,回跳头
    		raf.seek(0); // 回到顶点
    		byte [] data = new byte[8];
    		int len = raf.read(data);
    		System.out.println("姓名:" + new String(data,0,len).trim() + "、年龄:" + raf.readInt());
		}
    	raf.close();
    }
}

整体的使用之中由用户自行定义要读取的位置,而后按照指定的结构进行数据的读取。

相关标签: 阿里Java学习路线

推荐阅读