文件指针操作

 文件指针操作

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();
    }
}

 

posted on 2015-05-12 17:24  manue1  阅读(1108)  评论(0编辑  收藏  举报

导航