RandomAccessFile的用法

23 篇文章 0 订阅

    RandomAccessFile是一个很有用的类,可以将字节流写入到磁盘文件中,对应的也可以从磁盘文件中读取出字节流,它可以用于多线程下载,参考:http://blog.csdn.net/yourijing/article/details/47667709

    在API中关于RandomAccessFile的描述如下:此类的实例支持对随机访问文件的读取和写入。随机访问文件的行为类似存储在文件系统中的一个大型 byte 数组。存在指向该隐含数组的光标或索引,称为文件指针;输入操作从文件指针开始读取字节,并随着对字节的读取而前移此文件指针。如果随机访问文件以读取/写入模式创建,则输出操作也可用;输出操作从文件指针开始写入字节,并随着对字节的写入而前移此文件指针。写入隐含数组的当前末尾之后的输出操作导致该数组扩展。该文件指针可以通过 getFilePointer 方法读取,并通过 seek方法设置。通常,如果此类中的所有读取例程在读取所需数量的字节之前已到达文件末尾,则出 EOFException(是一种 IOException)。如果由于某些原因无法读取任何字节,而不是在读取所需数量的字节之前已到达文件末尾,则抛出 IOException,而不是 EOFException。需要特别指出的是,如果流已被关闭,则可能抛出 IOException

1、 seek(long pos)方法 native方法 

   设置文件指针的偏移量

2、getFilePointer()方法 native方法

   返回此文件中的当前偏移量。

3、文件模式

“r” 以只读方式打开。调用结果对象的任何 write 方法都将导致抛出 IOException。

“rw” 打开以便读取和写入。如果该文件尚不存在,则尝试创建该文件。

“rws” 打开以便读取和写入,对于 “rw”,还要求对文件的内容或元数据的每个更新都同步写入到底层存储设备。

“rwd”   打开以便读取和写入,对于 “rw”,还要求对文件内容的每个更新都同步写入到底层存储设备

代码事例:

public class CharsetTest {
       public static void main(String[] args) throws IOException {
         Person person = new Person(10, "zhangsan", 12.3);
         RandomAccessFile raf = new RandomAccessFile("D://java.txt", "rw");
         person.WriteFile(raf);
         System.out.println("OK");
         raf.seek(0);
         person.ReadFile(raf);
  }
}


class Person 
{
private int id;
private String nameString;
private double height;
public  Person()
{

}
public  Person(int id,String name,double hei)
{
this.id = id;
this.nameString = name;
this.height = hei;
}
public void WriteFile(RandomAccessFile raf) throws IOException

{

               //写如文件

raf.writeInt(id);
raf.writeUTF(nameString);
raf.writeDouble(height);
}
public void ReadFile(RandomAccessFile raf) throws IOException
{
//读出文件,若没有按照写入的顺序读,则报异常 或结果异常
int temp = raf.readInt();
String string = raf.readUTF();
double db = raf.readDouble();
System.out.println(temp+"  " + string +"  "+ db);
}
}



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值