IO:RandomAccessFIle(随机流)

※ java.io.RandomAccessFile类

此类的实例支持对随机访问文件的读取和写入。随机访问文件的行为类似存储在文件系统中的一个大型 byte 数组。存在指向该隐含数组的光标或索引,称为文件指针;输入操作从文件指针开始读取字节,并随着对字节的读取而前移此文件指针。如果随机访问文件以读取/写入模式创建,则输出操作也可用;输出操作从文件指针开始写入字节,并随着对字节的写入而前移此文件指针。写入隐含数组的当前末尾之后的输出操作导致该数组扩展。该文件指针可以通过 getFilePointer 方法读取,并通过 seek 方法设置。

通常,如果此类中的所有读取例程在读取所需数量的字节之前已到达文件末尾,则抛出 EOFException(是一种 IOException)。如果由于某些原因无法读取任何字节,而不是在读取所需数量的字节之前已到达文件末尾,则抛出 IOException,而不是 EOFException。需要特别指出的是,如果流已被关闭,则可能抛出 IOException。
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
※ 代码如下:

package com.briup.IO;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;

public class RandomAccessFIleTest {
    public static void main(String[] args) {
        //第一个参数可以指路径或File文件类型
        //第二个参数表示的是权限 r表示只读w表示只写
        RandomAccessFile raf=null;
        try {
                raf=
                    new RandomAccessFile("src/com/briup/IO/IO.txt", "r");
         //读到行末返回null值
                String str=null;
                while((str=raf.readLine())!=null){
                    byte[] b=str.getBytes("ISO8859-1");
                    String ss=new String(b,"UTF-8");
                    System.out.println(ss);
                }
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
                try {
                    if(raf!=null)raf.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
        }
    }
}







package com.briup.IO;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;

public class RandomAccessFIleTest1 {
    public static void main(String[] args) {
        RandomAccessFile raf=null;
        try {
                raf=
                    new RandomAccessFile("src/com/briup/IO/IO1.txt", "r");
                String str=null;
                //seek方法在读之前调用,在标记的下一个位置读取
                //raf.seek(9);
                while((str=raf.readLine())!=null){
                    byte[] b=str.getBytes("ISO8859-1");
                    String ss=new String(b,"UTF-8");
                    System.out.println(ss);
                }
                //获取文件的偏移位置
                long pointer=raf.getFilePointer();
                System.out.println(pointer);
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
                try {
                    if(raf!=null)raf.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
        }
    }
}







package com.briup.IO;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;

public class RandomAccessFIleTest2 {
    public static void main(String[] args) {
        RandomAccessFile raf=null;
        try {
                raf=
                    new RandomAccessFile("src/com/briup/IO/IO1.txt", "rw");
//              raf.writeBoolean(false);
//              raf.writeDouble(18D);
                raf.writeUTF("中国");
                //存值和取值顺序一样,多次存入值是覆盖效果
//              System.out.println(raf.readBoolean());
//              System.out.println(raf.readDouble());
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
                try {
                    if(raf!=null)raf.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
        }
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值