上一节我们说到通过File访问文件,但是我们访问文件的最终目的都是访问文件中的内容,那么这个时候我们就需要使用到的一个类就是:RandomAccessFile。

此类的定义如下:

public class RandomAccessFile extends Object

  implements DataOutput,DataInput,Closeable

 

  此类的实例支持对随机访问文件的读取和写入。该操作方法通过一种文件指针的方式表示当前访问的位置,可以通过seek方法重置。需要注意的是流操作在结束之后都需要关闭。

构造方法:

RandomAccessFile(File file,String mode):创建从中读取和向其中写入(可选)的随机访问文件流

RandomAccessFile(String name,String mode):创建从中读取和向其中写入(可选)的随机访问文件流

mode参数指定访问模式,包括:

“r”:以只读方式打开

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

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

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

主要操作方法:

1. void close 关闭随机访问文件流并释放与该流关联的所有系统资源
2. long getFilePointer() 返回此文件中的当前偏移量 
3. long length() 返回此文件的长度 
4. int read()  从此文件读取一个字节
5. int read(byte[] b,int off,int len) 将最多len个数据字节从此文件读入byte数组 
6. boolean readBoolean() 从此文件读取一个boolean 
7. byte readByte() 从此文件读取一个有符号的八位值 
8. char readChar() 从此文件读取一个字符 
9. double readDouble() 从此文件读取一个double 
10. float readFolat() 从此文件读取一个float 
11. void readFully(byte[] b) 将b.length个字节从此文件读入byte数组,并从当前文件指针开始 
12. void readFully(byte[] b,int off,int len)  将正好len哥字节从此文件读入byte数组,并从当前文件指针开始
13. int readInt() 从此文件读取一个有符号的32位证书 
14. String readLine() 从此文件读取文本的下一行 
15. long readLong() 从此文件读取一个有符号的64位整数 
16. short readShort() 从此文件读取一个有符号的16位数 
17. void seek(long pos) 设置到此文件开头测量到的文件指针偏移量,在该位置发生下一个读取或写入操作 
18.  int skipBytes(int n) 尝试跳过输入的n个字节以丢弃跳过的字节 
19. void write(byte[] b) 将b.length个字节从指定byte数组写入到此文件并从当前文件指针开始
20. void write(byte[] b,int off,int len) 将len个字节从指定byte数组写入到此文件,并从偏移量off处开始
21. void write(int b) 想此文件写入指定的字节
22. void writeBoolean(boolean v) 按单字节值将boolean写入该文件
23. void writeByte(int v) 按单字节值将byte写入该文件
24. void wirteBytes(String s) 按字节序列将该字符串写入该文件
25. void writeChar(int v) 按双子姐将char写入该文件,先写高字节
26. void writeChars(String s) 按字符序列将一个字符串写入该文件
27. void writeDouble(double v)

使用Double类的doubleToLongBits方法将双精度参数转换为一个long,然后按八字节数量将该long值写入该文件,先写高字节

28. void writeFloat(float v) 使用Float类的floatToIntBits方法将浮点参数转换为一个int,然后按四字节数量将该int值写入该文件先写高字节
29. void writeInt(int v) 按四个字节将int写入该文件,先写入高字节
30. void writeLong(long v) 按八个字节将short写入该文件,先写入高字节
31. void writeShort(int v) 按两个字节将short写入该文件,先写入高字节
32 void writeUTF(String str) 使用UTF-8编码以与机器无关的方式将一个字符串写入文件

实例:

实例:

package com.fuwh.raf;

import java.io.RandomAccessFile;

public class RadomAccessFileWrite {

    public static void main(String[] args) throws Exception {
//实现对classpaths下的文件raf.txt实现写入
String name="zhangsan";
int age=12;
float salary=5500.15f;
String dept="Java开发"; RandomAccessFile raf=new RandomAccessFile("raf.txt","rw");
raf.writeBytes(name);
raf.writeInt(age);
raf.writeFloat(salary);
raf.write(dept.getBytes());
raf.close(); RandomAccessFile raf2=new RandomAccessFile("raf.txt","r");
byte[] b=new byte[8];
raf2.read(b);
System.out.println(new String(b));
System.out.println(raf2.readInt());
System.out.println(raf2.readFloat());
byte[] c=new byte[8];
for(int i=0;i<8;i++){
c[i]=raf2.readByte();
}
System.out.println(new String(c));
raf2.close();
}
}

通过这个实例,明显可以感觉到,这样的操作非常的不灵活,因此我们就需要使用到java.io包中的其他一些列io操作类

Java IO(二)的更多相关文章

  1. 图解 Java IO : 二、FilenameFilter源码

    Writer      :BYSocket(泥沙砖瓦浆木匠) 微         博:BYSocket 豆         瓣:BYSocket FaceBook:BYSocket Twitter   ...

  2. Java IO(二)

    字节流 字符流: FileReader FileWriter BufferedReader BufferedWriter 字节流: FileInputStream FileOutputStream B ...

  3. java IO(二):字节流

    */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...

  4. Java IO(二) 之 InputStream

    源代码均以JDK1.8作为參考 前言: InputStream实现了两个接口Closeable和AutoCloseable: Closeable:JDK1.5中引入,Closeable接口中仅仅有一个 ...

  5. 系统学习 Java IO (二)----IO 异常处理

    目录:系统学习 Java IO---- 目录,概览 我们使用流后,需要正确关闭 Streams 和 Readers / Writers . 这是通过调用 close() 方法完成的,看看下面这段代码: ...

  6. Java IO(二)--RandomAccessFile基本使用

    RandomAccessFile: 翻译过来就是任意修改文件,可以从文件的任意位置进行修改,迅雷的下载就是通过多个线程同时读取下载文件.例如,把一个文件分为四 部分,四个线程同时下载,最后进行内容拼接 ...

  7. 系统学习 Java IO ---- 目录,概览

    Java IO 类的系统教程,原创.主要参考自英文教程 Java IO Tutorial 和 Java Doc. http://tutorials.jenkov.com/java-io/index.h ...

  8. Java IO详解(二)------流的分类

    一.根据流向分为输入流和输出流: 注意输入流和输出流是相对于程序而言的. 输出:把程序(内存)中的内容输出到磁盘.光盘等存储设备中      输入:读取外部数据(磁盘.光盘等存储设备的数据)到程序(内 ...

  9. Java IO学习笔记二

    Java IO学习笔记二 流的概念 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成. 程序中的输入输 ...

  10. Java基础---IO(二)--File类、Properties类、打印流、序列流(合并流)

    第一讲     File类 一.概述 1.File类:文件和目录路径名的抽象表现形式 2.特点: 1)用来将文件或文件夹封装成对象 2)方便于对文件与文件夹的属性信息进行操作 3)File类的实例是不 ...

随机推荐

  1. alpha冲刺第三天

    一.合照 二.项目燃尽图 三.项目进展 今天是一个瓶颈期,在昨天被困住的地方今天还是没能解决,所以今天的项目进展并没有发生什么变化. 今天晚上xl和lj去实验室找学姐了,在学姐的帮助下大概有了一点思路 ...

  2. Beta No.3

    今天遇到的困难: 组员对github极度的不适应 github的版本控制和协同化编程确实操作起来需要一定的熟练度,我们缺乏这种熟练度 Android Studio版本不一致项目难以打开的问题仍然无法解 ...

  3. Beta冲刺-用户测试报告

    一.项目概述 1.1项目名称 高校学生征信系统 1.2项目简介 此项目基于SSH框架,力图为学生提供征信服务和信用相关的借款和申请活动.其中以信用统计和管理为主,信用使用为辅,构建出一个集信用收集和使 ...

  4. 解决flask的端口占用

    问题:socket.error: [Errno 48] Address already in use 在编辑flask代码时,如果没有关闭flask的程序,默认的5000端口一直被占用. 再次运行fl ...

  5. 201621123057 《Java程序设计》第9周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 在上一周的总结上做了一点补充 1.2 选做:收集你认为有用的代码片段 2. 书面作业 本次作业题集集合 1. ...

  6. 轻量级django 一

    from django.http import HttpResponse from django.conf.urls import url from django.conf import settin ...

  7. 单向链表在O(1)时间内删除一个节点

    说删链表节点,第一时间想到就是遍历整个链表,找到删除节点的前驱,改变节点指向,删除节点,但是,这样删除单链表的某一节点,时间复杂度就是O(n),不符合要求: 时间复杂度是O(n)的做法就不说了,看看O ...

  8. 201421123042 《Java程序设计》第8周学习总结

    1. 本周学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. 2. 书面作业 1. ArrayList代码分析 1.1 解释ArrayList的contains源代码 源代码: 答:查找 ...

  9. bzoj 4373 算术天才⑨与等差数列

    4373: 算术天才⑨与等差数列 Time Limit: 10 Sec  Memory Limit: 128 MBhttp://www.lydsy.com/JudgeOnline/problem.ph ...

  10. 服务器数据恢复_服务器xfs数据丢失数据恢复

    简介:太原一家公司的服务器出现故障,服务器是linux服务器,连接了一台某型号的存储,文件系统为xfs文件系统.管理员使用xfs_repair工具试图对文件系统进行修复但修复失败,linux服务器中所 ...