zoukankan      html  css  js  c++  java
  • RandomAccessFile类——高效快捷地读写文件

    RandomAceessFile类

    RandomAccessFile类是一个专门读写文件的类,封装了基本的IO流,在读写文件内容方面比常规IO流更方便、更灵活。但也仅限于读写文件,无法像IO流一样,可以传输内存和网络中的数据。

    RandomAccessFile常用方法和使用方式

    • getFilePointer() :获取当前文件的记录指针位置
    • seek(long pos):把记录指针移到pos处
    • read()和write():读取内容和写入内容
    • readXxx()和writeXxx():用于处理各种值类型
    • writeBytes()和writeChars()可以写入字符串,编码不一致会造成乱码。所以推荐String.getBytes(),用write()来写入。
    总体来说,如果只处理文件的话,使用RandomAccessFile很方便,而且读写方法和IO流都差不多,只是针对不同类型数据进行扩展,使用简单明了。最重要的就是该类的seek()方法,该方法可以指定读写的位置。还有该类构造器需要一个参数来确定使用什么模式。 
    r:只读模式
    rw:读写模式
    rwd:和rw差不多,但需要对文件内容每个更新都进行同步。

    代码示例:

    (一)RandomAccessFile读取文件内容
            //rw : 设置模式为读写模式
            RandomAccessFile raf = new RandomAccessFile("D:\reviewIO\runtime.txt","rw");
            System.out.println("当前记录指针位置:" + raf.getFilePointer());
            byte[] buf = new byte[1024];
            int    len = 0;
            while((len = raf.read(buf)) != -1) {
                System.out.println(new String(buf));
            }
    (二)RandomAccessFile写入数据到文件中
    public class Test {
        public static void main(String[] args) throws IOException {
            //要读写的数据源
            File f = new File("D:\reviewIO\RandomAccessFileTest.txt");
            //键盘输入作为数据来源
            Scanner sc = new Scanner(System.in);
            //指定文件不存在就创建同名文件
            if(!f.exists())    f.createNewFile(); 
            
            //rw : 设为读写模式
            RandomAccessFile raf = new RandomAccessFile(f,"rw");
            System.out.println("当前记录指针位置:" + raf.getFilePointer());
            
            while(true) {
                String str = sc.next();
                raf.writeBytes(str);
                System.out.println("当前记录指针位置:" + raf.getFilePointer());
                //输入end结束循环
                if(str.equals("end")) break;
            }
            
        }
    }
    • 使用小结:RandomAccessFile写入数据到文件中不会覆盖文件内容。只要程序每运行一次,该类的记录指针总是为0,这意味着从文件最前端开始读写,所以需要注意。
    (三)RandomAccessFile的记录指针放在文件尾部,用于添加内容
    public class Test {
        public static void main(String[] args) throws IOException {
            //读写的数据源
            File f = new File("D:\reviewIO\RAF.txt");
            //指定文件不存在就创建同名文件
            if(!f.exists())    f.createNewFile();         
            //rw : 设为读写模式
            RandomAccessFile raf = new RandomAccessFile(f,"rw");
            System.out.println("当前记录指针位置:" + raf.getFilePointer());
            //记录指针与文件内容长度相等
            raf.seek(raf.length());    
            System.out.println("当前文件长度:" + raf.length());
            //以字节形式写入字符串
            raf.write("ABCDEFG写入尾部".getBytes());
            System.out.println("当前记录指针位置:" + raf.getFilePointer());            
        }    
    }
    • 使用小结:如果使用RandomAccessFile添加内容,要把记录指针设为同文件一样的长度,保证在文件的尾部进行写入数据。write()写入中文,使用String.getByte(),保证两者编码一致。
  • 相关阅读:
    JS面向对象编程的实现
    初见Javascript
    详解promise
    radio单选按钮组操作
    cookie欺骗实战案例
    XSS攻击
    前端如何实现异步加载
    日常问题
    求1+2+...+n
    二叉搜索树的后序遍历序列
  • 原文地址:https://www.cnblogs.com/fwnboke/p/8529511.html
Copyright © 2011-2022 走看看