Java IO(二)
上一节我们说到通过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(二)的更多相关文章
- 图解 Java IO : 二、FilenameFilter源码
Writer :BYSocket(泥沙砖瓦浆木匠) 微 博:BYSocket 豆 瓣:BYSocket FaceBook:BYSocket Twitter ...
- Java IO(二)
字节流 字符流: FileReader FileWriter BufferedReader BufferedWriter 字节流: FileInputStream FileOutputStream B ...
- java IO(二):字节流
*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...
- Java IO(二) 之 InputStream
源代码均以JDK1.8作为參考 前言: InputStream实现了两个接口Closeable和AutoCloseable: Closeable:JDK1.5中引入,Closeable接口中仅仅有一个 ...
- 系统学习 Java IO (二)----IO 异常处理
目录:系统学习 Java IO---- 目录,概览 我们使用流后,需要正确关闭 Streams 和 Readers / Writers . 这是通过调用 close() 方法完成的,看看下面这段代码: ...
- Java IO(二)--RandomAccessFile基本使用
RandomAccessFile: 翻译过来就是任意修改文件,可以从文件的任意位置进行修改,迅雷的下载就是通过多个线程同时读取下载文件.例如,把一个文件分为四 部分,四个线程同时下载,最后进行内容拼接 ...
- 系统学习 Java IO ---- 目录,概览
Java IO 类的系统教程,原创.主要参考自英文教程 Java IO Tutorial 和 Java Doc. http://tutorials.jenkov.com/java-io/index.h ...
- Java IO详解(二)------流的分类
一.根据流向分为输入流和输出流: 注意输入流和输出流是相对于程序而言的. 输出:把程序(内存)中的内容输出到磁盘.光盘等存储设备中 输入:读取外部数据(磁盘.光盘等存储设备的数据)到程序(内 ...
- Java IO学习笔记二
Java IO学习笔记二 流的概念 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成. 程序中的输入输 ...
- Java基础---IO(二)--File类、Properties类、打印流、序列流(合并流)
第一讲 File类 一.概述 1.File类:文件和目录路径名的抽象表现形式 2.特点: 1)用来将文件或文件夹封装成对象 2)方便于对文件与文件夹的属性信息进行操作 3)File类的实例是不 ...
随机推荐
- codeforce round#466(div.2) B. Our Tanya is Crying Out Loud
B. Our Tanya is Crying Out Loud time limit per test1 second memory limit per test256 megabytes input ...
- Oracle之SQL优化专题01-查看SQL执行计划的方法
在我2014年总结的"SQL Tuning 基础概述"中,其实已经介绍了一些查看SQL执行计划的方法,但是不够系统和全面,所以本次SQL优化专题,就首先要系统的介绍一下查看SQL执 ...
- 高级软件工程2017第6次作业——团队项目:Alpha阶段综合报告
1.版本测试报告 1.1在测试过程中总共发现了多少Bug?每个类别的Bug分别为多少个? Bug分类 Bug内容 Fixed 编辑博文时改变文字格式会刷新界面 Can't reproduced 无 N ...
- 项目Alpha冲刺Day9
一.会议照片 二.项目进展 1.今日安排 侧栏及相关刷新完成,项目结构小变动.个人信息和修改密码后台完成. 2.问题困难 前后台联调出现问题,配置修改了半天还没改好.好像是会话丢失,初步判断应该是后台 ...
- Alpha冲刺Day12
Alpha冲刺Day12 一:站立式会议 今日安排: 由黄腾飞和张梨贤继续完成政府人员模块下的风险管控子模块下的分级统计展示 由林静继续完成企业注册模块 由周静平完成登录页面模块 二:实际项目进展 人 ...
- Alpha冲刺Day8
Alpha冲刺Day8 一:站立式会议 今日安排: 经过为期5天的冲刺,基本完成企业人员模块的开发.因第三方机构与企业存在委托的关系.第三方人员对于风险的自查.风险列表的展示以及自查风险的统计展示(包 ...
- 201621123057 《Java程序设计》第9周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 在上一周的总结上做了一点补充 1.2 选做:收集你认为有用的代码片段 2. 书面作业 本次作业题集集合 1. ...
- 201621123057 《Java程序设计》第5周学习总结
1. 本周学习总结 1.1 写出你认为本周学习中比较重要的知识点关键词 接口,interface,implements,方法签名,has-a,Comparable,Comparator. 1.2 尝试 ...
- vim配置强悍来袭
vim 这个关键字,我不想再过多的解释,相信看到这里的同仁,对vim都有十七八分的理解,如果你还不知道vim是什么,自己找个黑屋子... 废话不多说,今天在这里主要说vim的,不带插件的配置,也就 ...
- Linux基础常用命令
Linux 下命令有很多,并且很多命令用法又有不同的选项,这里介绍一些常用的最基本的Linux命令的用法,希望给大家留下便利之处. 1.cd 切换目录.例如 cd /home 可切换到home目录, ...