上一节我们说到通过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. win10下NeuralStyle的tensorflow版实验

    ---恢复内容开始--- 首先配置win10下的tensorflow-gpu的运行环境,然后在github上将NeuralStyle拷贝下来,最后根据文档说明参数,运行文件,即可得到自己喜欢的styl ...

  2. 关于hbase中的hbase-site.xml 配置详解

    该文档是用Hbase默认配置文件生成的,文件源是 hbase-default.xml hbase.rootdir 这个目录是region server的共享目录,用来持久化HBase.URL需要是'完 ...

  3. Java日志框架:logback详解

    为什么使用logback 记得前几年工作的时候,公司使用的日志框架还是log4j,大约从16年中到现在,不管是我参与的别人已经搭建好的项目还是我自己主导的项目,日志框架基本都换成了logback,总结 ...

  4. JQuery操作option的添加、删除、取值

    1. $("#select_id").change(function(){//code...}); //为Select添加事件,当选择其中一项时触发 2. var checkTex ...

  5. java虚拟机的内存分配与回收机制

    分为4个方面来介绍内存分配与回收,分别是内存是如何分配的.哪些内存需要回收.在什么情况下执行回收.如何监控和优化GC机制. java GC(Garbage Collction)垃圾回收机制,是java ...

  6. beta冲刺7

    前言:最后一篇惹.明天就是正式交差了.有点慌-- 昨天的未完成: 用户试用+测评 输入部分的正则式判定 今天的工作: 登陆界面修改 我的社团显示效果优化 部分信息注册后锁定无法修改 其他部分功能优化 ...

  7. C语言第三次博客作业—循环结构

    一.PTA实验作业 题目1 1.实验代码 int N,i; //N为用户数 char sex; //sex表示性别 double High; //Hight表示身高 scanf("%d&qu ...

  8. 高校征信系统项目Postmortem结果

    设想和目标 1 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 我们的软件需要解决的问题是当前高校学生征信系统建设薄弱的问题,我们试图建立一个征信系统,在完成之后推 ...

  9. 201621123062《java程序设计》第六周作业总结

    1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图或相关笔记,对面向对象思想进行一个总结. 注1:关键词与内容不求多,但概念之间的联系要清晰 ...

  10. 《Language Implementation Patterns》之 数据聚合符号表

    本章学习一种新的作用域,叫做数据聚合作用域(data aggregate scope),和其他作用域一样包含符号,并在scope tree里面占据一个位置. 区别在于:作用域之外的代码能够通过一种特殊 ...