java基础知识回顾之javaIO类--RandomAccessFile类

java.io
类 RandomAccessFile

java.lang.Object
    java.io.RandomAccessFile1.该类不是IO流中的子类。2.该类既能读又能写。3.该对象内部分装了一个字节数组,通过指针可以操作数组中的元素。4.其实该对象就是将字节输入流和输出流进行了封装。5.该对象只能对文件操作,目的和源只能是文件对象。通过看构造方法可以看得出来。RandomAccessFile(File file, String mode) RandomAccessFile(String name, String mode) 普通方法:

public void seek(long pos) throws IOException   设置指针的初始位置public long getFilePointer()throws IOException  返回指针的位置,就是从开头的偏移量,以字节为单位。

mode 参数指定用以打开文件的访问模式:



含意

"r" 以只读方式打开。调用结果对象的任何 write 方法都将导致抛出 IOException
"rw" 打开以便读取和写入。如果该文件尚不存在,则尝试创建该文件。
"rws" 打开以便读取和写入,对于 "rw",还要求对文件的内容或元数据的每个更新都同步写入到底层存储设备。
"rwd"   打开以便读取和写入,对于 "rw",还要求对文件内容的每个更新都同步写入到底层存储设备。
代码:在ranacc.txt写入,张三,97,王强,99
    //使用RandomAccessFile对象写入一些人员信息,比如姓名和年龄。
    public static void writeFile() throws IOException{
        /*
         * 如果文件不存在,则创建,如果文件存在,不创建
         *
         */
        RandomAccessFile raf = new RandomAccessFile("ranacc.txt","rw");
        raf.write("张三".getBytes());
        raf.writeInt(97);
        raf.write("小强".getBytes());
        raf.writeInt(99);
//
        raf.close();
    }

在RandomAccessFile对象的字节数组中存放如下图所示:

汉字为两个字节,数字为一个字节:

然后需求要求读小强的信息,把小强,99输出。

这就用到RandomAccessFile对象中的seek方法。



/**
     * 读取小强的信息,而不是张三的信息
     * @throws IOException
     */
    public static void readFile() throws IOException {

        RandomAccessFile raf = new RandomAccessFile("ranacc.txt", "r");

        //通过seek设置指针的位置。
        raf.seek(1*8);//随机的读取。只要指定指针的位置即可。 

        byte[] buf = new byte[4];
        raf.read(buf);

        String name = new String(buf);//

        int age = raf.readInt();//从当前指针开始读4个字节

        System.out.println("name="+name);
        System.out.println("age="+age);

        System.out.println("pos:"+raf.getFilePointer());//获取指针的位置

        raf.close();

    }

输出:

name=小强
age=99
pos:16

结论:随机读取,可以读取字节数组中的任意一个位置的数据。


java基础知识回顾之javaIO类--RandomAccessFile类

时间: 2024-10-10 22:54:20

java基础知识回顾之javaIO类--RandomAccessFile类的相关文章

java基础知识回顾之javaIO类--管道流PipedOutputStream和PipedIutputStream

管道流(线程通信流):管道流的主要作用是可以进行两个线程间的通讯,分为管道输出流(PipedOutputStream).管道输入流(PipedInputStream),如果想要进行管道输出,则必须要把输出流连在输入流之上.如图所示: 1.管道输入流应该连接到管道输出流 ,输入流和输出流可以直接连接       2.使用多线程操作,结合线程进行操作.通常由某个线程从管道输入流中(PipedInputStream)对象读取.          并由其他线程将其写入到相应的端到输出流中.不能使用单线程

java基础知识回顾之javaIO类--File类应用:获取指定目录下面的指定扩展名的文件,将文件的绝对路径写入到目的文件当中

/** * File文件综合应用 * 需求:获取指定目录下面,指定扩展名的文件,将文件的绝对路径写到文本文件当中. *  * 思路:1.需要深度遍历.--递归 * 2.遍历的过程中过滤指定扩展名的文件--过滤器FileNameFilter,将文件存入容器中 * 3.将容器中的内容遍历,写入到指定文件中 * */ 代码:  FilenameFilter 过滤器: package com.lp.ecjtu.File.filter; import java.io.File; import java.i

java基础知识回顾之javaIO类--内存操作流ByteArrayInputStream和ByteArrayOutputSteam(操作字节数组)

直接看代码: package cn.itcast.io.p6.bytestream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; public class ByteArrayStreamDemo { /** * @param args * @throws IOException * 特点 * 1.内存操作流 * 2.不操作底层资源,不调

java基础知识回顾之javaIO类--File类应用:删除带内容的目录

/** * 深度删除一个带内容的目录 * 原理:必须从里往外删除,需要深度遍历 * @author Administrator * */ public class FileDeleteList { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub File dir = new File("E:\\复件 demodir"); removedir(

java基础知识回顾之javaIO类--File类应用:递归深度遍历文件

代码如下: package com.lp.ecjtu.File.FileDeepList; import java.io.File; public class FileDeepList { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub File dir = new File("E:"+File.separator+"demodir

java基础知识回顾之javaIO类--File类应用:过滤器接口FilenameFilter和FileFilter

FilenameFilter和FileFilter都是用来过滤文件,例如过滤,以.jpg或者.java结尾的文件,通过看他们的源码:通过使用File类中String[] list(FilenameFilter filter)或者public File[] listFiles(FileFilter filter)方法,把FilenameFilter或者FileFilter接口对象作为参数传入,通过实现接口里面的 boolean accept(File dir, String name) 或者boo

java基础知识回顾之javaIO类--File类

File类是对文件系统中文件以及目录(文件夹)进行封装的对象,可以通过面向对象的思想来操作文件和目录(文件夹).File类保存文件或目录的各种元素的信息,包括文件名,文件长度,最后修改日期,是否可读,获取当前文件的路径名,判断指定文件是否存在,获得当前文件的列表,创建.删除文件目录等方法. /**     * 构造方法:File f = new File("file.txt");//file.txt 相对路径     *       File f1 = new File("c

java基础知识回顾之javaIO类---FileWriter和FileReader

FileWriter类的构造方法定义如下: 1.public FileWriter(File file)throws IOException 字符流的操作比字节流操作好在一点,就是可以直接输出字符串了,不用再像之前那样进行转换操作了. package com.lp.ecjtu; import java.io.FileWriter; import java.io.IOException; public class FileWriterDemo { /** * 字符流,创建一个FileWriter对

java基础知识回顾之javaIO类---BufferedReader和BufferedWriter

使用了装饰设计模式:此类的设计是为了提高流操作数据的效率.思想就是定义容器将数据进行临时存储,对于缓冲区对象,其实就是将这个容器进行了分装,并提供了更高效的操作方法. 原理: 1,使用流的read方法从源中读取一批数据存储到缓冲区的数组中. 2,通过计数器记录住存储的元素个数. 3,通过数组的角标来获取数组中的元素(从缓冲区中取数据). 4,指针会不断的自增,当增到数组长度,会归0.计数器会自减,当减到0时,就在从源拿一批数据进缓冲区. BufferReader: package com.lp.