IO流 RandomAccessFile

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IO流 RandomAccessFile相关的知识,希望对你有一定的参考价值。

package com.yyq;
import java.io.*;
/*
 * RandomAccessFile 
 * 该类不算是IO体系中的子类
 * 而是直接继承自Object
 * 但是他是Io包中的成员,因为它具备读和写的功能
 * 内部封装了一个数组,而且通过指针对数组的元素进行操作
 * 可以通过getFilePointer获取指针位置
 * 同时可以通过seek改变指针的位置
 * 
 * 其实完成读写的原理就是内部封装了字节输入流和输出流
 * 通过构造函数可以看出:该类只能操作文件,而且操作文件还有模式
 * 如果该对象的构造函数要操作的文件不存在,会自动创建,如果存在则不会覆盖
 * 
 * 如果模式为只读r 不会创建文件,回去读取一个已存在文件,
 * 如果该文件不存在,则会出现异常
 * 如果模式为rw,操作的文件不存在,会自动创建,如果存在则不会覆盖
 * 它可以实现数据的分段往里写入数据。
 * 
 */
public class RandomAccessFileDemo {

    public static void main(String[] args) throws Exception {
        // TODO Auto-generated method stub
        writeFile();
        //readFile();
    }
    public static void readFile() throws IOException{
        RandomAccessFile raf = new RandomAccessFile("ran.txt","r");
        // 调整对象中的指针
        // 跳过多少个字节来取,跳过指定的字节数
        
        raf.seek(0);
        // 可以往下跳,但是不能往回跳
        raf.skipBytes(1);
        byte[] buf = new byte[4];
        raf.read(buf);
        String name = new String(buf);
        //int age = raf.readInt();
        System.out.println(name);
    }
    // RandomAccessFile 可以随机写
    public static void writeFile_2() throws IOException{
        RandomAccessFile raf = new RandomAccessFile("ran.txt","rw");
        raf.write("lisi".getBytes());
        //wirte 方法 只能显示 后8位
        raf.writeInt(258);
        raf.close();
    }
    public static void writeFile() throws IOException{
        RandomAccessFile raf = new RandomAccessFile("ran.txt","rw");
        raf.seek(8*4);
        raf.write("aaa".getBytes());
        //wirte 方法 只能显示 后8位
        raf.writeInt(258);
        raf.close();
    }

}

 

以上是关于IO流 RandomAccessFile的主要内容,如果未能解决你的问题,请参考以下文章

JAVA IO流相关代码(Serializable接口,管道流PipedInputStream类,RandomAccessFile类相关代码)

java IO流 RandomAccessFile的使用

[javaSE] IO流(RandomAccessFile)

IO流 RandomAccessFile

Java IO流 之 RandomAccessFile

Java IO流 之 RandomAccessFile 多线程下载