zoukankan      html  css  js  c++  java
  • 文件指针操作

     文件指针操作

    1. getFilePointer方法

    RandomAccessFile的读写操作都是基于指针的,也就是说总是在指针当前所指向的位置进行读写操作。
    RandomAccessFile提供了一个可以获取当前指针位置的方法:
    long getFilePointer()
    RandomAccessFile在创建时默认指向文件开始(第一个字节),通过getFilePointer方法获取指针位置时值是"0"。
    例如:

    RandomAccessFile raf = new RandomAccessFile(file,”rw”);
    System.out.println(raf.getFilePointer());//0
    raf.write(‘A’);//写出一个字节后,指针自动向后移动到下一个字节位置
    System.out.println(raf.getFilePointer());//1
    raf.writeInt(3);
    System.out.println(raf.getFilePointer());//5
    raf.close(); 

    2. seek方法

    RandomAccessFile的提供了一个方法用于移动指针位置。
    void seek(long pos)
    使用该方法可以移动指针到指定位置。
    例如:

    RandomAccessFile raf = new RandomAccessFile(file,”rw”);
    System.out.println(raf.getFilePointer());//0
    raf.write(‘A’);//指针位置1
    raf.writeInt(3);//指针位置5
    raf.seek(0);//将指针移动到文件开始处(第一个字节的位置)
    System.out.println(raf.getFilePointer());//0
    raf.close(); 

    3. skipBytes方法

    RandomAccessFile的提供了一个方法可以尝试跳过输入的 n 个字节以丢弃跳过的字节,方法定义为:
    int skipBytes(int n)
    该方法可能跳过一些较少数量的字节(可能包括零)。这可能由任意数量的条件引起;在跳过n个字节之前已到达文件的末尾只是其中的一种可能。此方法不抛出 EOFException。返回跳过的实际字节数。如果 n 为负数,则不跳过任何字节。

    /**
     * 获取游标位置以及对基本类型进行操作的方法
     * @author Administrator
     *
     */
    class TestRandomAccessFileDemo{
        public static void main(String[] args) throws IOException {
            RandomAccessFile raf = new RandomAccessFile("data.bat", "rw");
            raf.write('a'); // 写一个字节
            //将int最大值写入文件
            raf.writeInt(Integer.MAX_VALUE); 
            raf.writeDouble(3.141592612);
            System.out.println(raf.getFilePointer());//13
            /*
             * RandomAccessFile 提供一个写字符串的方法
             * 使UTF-8编码将字符串转换为字节后写出
             * void writeUTF(String str)
             */
            String str ="你好啊"; //24  UTF-8 多写两个字节
            raf.writeUTF(str);
            
        }
        
    }
    class TestRandomAccessFileDemo7{
        public static void main(String[] args) throws IOException {
            RandomAccessFile raf = new RandomAccessFile("data.bat", "r");
            int d = raf.read();
            char c= (char)d;
            System.out.println(c);//a
            System.out.println(raf.getFilePointer());//1
            /*
             * int readInt()
             * 连续读取4个字节,并转换为对应的int值
             */
            int max =raf.readInt();
            System.out.println(max);//Integer.MAX_VALUE  2147483647
            
            System.out.println(raf.getFilePointer()); //5
            
            //跳过double 8字节
            raf.seek(13);
            String str =raf.readUTF();
            System.out.println(str);//你好啊
            
            //读取double的内容
            raf.seek(5);
            double dou = raf.readDouble();
            System.out.println(dou);
            
        }
    }
    class TestRandomAccessFile8{
        public static void main(String[] args) throws IOException {
            /*
             * 写之前先将游标移动到文件末尾在进行写操作
             * 这样就是追加内容
             */
            RandomAccessFile raf= new RandomAccessFile("append.txt", "rw");
            /*
             * RandomAccessFile 同样支持Length
             * 用于获取文件的字节量
             */
            raf.skipBytes(20); //跳过下面20个
            raf.seek(raf.length());
            raf.write("药".getBytes("UTF-8"));
            
            raf.close();
        }
    }
  • 相关阅读:
    差分约束
    关系运算图。。。(差分约束)
    克鲁斯卡尔算法+并查集
    整体代换(数学)
    魔性の分块 | | jzoj1243 | | 线段树の暴力
    论人品 | | noip1015模拟考
    hash 表 | | jzoj 1335 | | 脑残+手残 | | 集合的关系
    凸轮大总结
    Floyd | | jzoj[1218] | | [Usaco2009 Dec]Toll 过路费 | | BZOJ 1774 | | 我也不知道该怎么写
    topsort | | jzoj[1226] | | NOIP2003神经网络
  • 原文地址:https://www.cnblogs.com/manue1/p/4498009.html
Copyright © 2011-2022 走看看