package special;

import java.io.IOException;
import java.io.RandomAccessFile; /**
* 随机访问流:
*
* 此类不属于任何一个输入流和输出流
* 直接继承自Object实现的类
* 可以对文件随机的进行读和写!
* @author mzy
*
*
* JDK:
* 此类的实例支持对随机访问文件的读取和写入。随机访问文件的行为类似存储在文件系统中的一个大型 byte 数组。
* 存在指向该隐含数组的光标或索引,称为文件指针;
* 输入操作从文件指针开始读取字节,并随着对字节的读取而前移此文件指针。
* 如果随机访问文件以读取/写入模式创建,则输出操作也可用;
* 输出操作从文件指针开始写入字节,并随着对字节的写入而前移此文件指针。
* 写入隐含数组的当前末尾之后的输出操作导致该数组扩展。
* 该文件指针可以通过 getFilePointer 方法读取,并通过 seek 方法设置。
*
* 通常,如果此类中的所有读取例程在读取所需数量的字节之前已到达文件末尾,则抛出 EOFException(是一种 IOException)。
* 如果由于某些原因无法读取任何字节,而不是在读取所需数量的字节之前已到达文件末尾,则抛出 IOException,而不是 EOFException。
* 需要特别指出的是,如果流已被关闭,则可能抛出 IOException。
*/
public class RandomAccessFileDemo {
// 第二个参数为mode:一共四种模式:
// 模式常用的 "r" 和 "rw"
// r read
// rw read and write
/* RandomAccessFile(File file, String mode) */
/* RandomAccessFile(String name, String mode) */
public static void main(String[] args) throws IOException {
write();
read();
} private static void read() throws IOException {
RandomAccessFile raf = new RandomAccessFile("raf.txt", "rw"); byte a = raf.readByte();
System.out.println("byte:" + a);
System.out.println("当前指针位置为:" + raf.getFilePointer()); int b = raf.readInt();
System.out.println("int:" + b);
System.out.println("当前指针位置为:" + raf.getFilePointer()); char c = raf.readChar();
System.out.println("char:" + c);
System.out.println("当前指针位置为:" + raf.getFilePointer()); boolean d = raf.readBoolean();
System.out.println("boolean:" + d);
System.out.println("当前指针位置为:" + raf.getFilePointer()); float e = raf.readFloat();
System.out.println("float:" + e);
System.out.println("当前指针位置为:" + raf.getFilePointer()); double f = raf.readDouble();
System.out.println("double:" + f);
System.out.println("当前指针位置为:" + raf.getFilePointer()); long g = raf.readLong();
System.out.println("long:" + g);
System.out.println("当前指针位置为:" + raf.getFilePointer()); String h = raf.readUTF(); // 2 + 3 + 3
System.out.println("UTF:" + h);
System.out.println("当前的指针位置为:" + raf.getFilePointer()); raf.seek(5);
char ch = raf.readChar();
System.out.println("定位指针为5: ch = " + ch); } private static void write() throws IOException {
RandomAccessFile raf = new RandomAccessFile("raf.txt", "rw"); raf.writeByte(100);
raf.writeInt(1000);
raf.writeChar('b');
raf.writeBoolean(true);
raf.writeFloat(12.34F);
raf.writeDouble(12.48);
raf.writeLong(123456789);
raf.writeUTF("中国"); // 不提供flush方法
raf.close();
}
}

最新文章

  1. 技术笔记:XMPP之openfire+spark+smack
  2. HDU5880 Family View(2016青岛网络赛 AC自动机)
  3. 关于(object sender, EventArgs e)
  4. (进阶篇)PHP+Mysql+jQuery找回密码
  5. C#正则提取html图片等
  6. 我心中的核心组件(可插拔的AOP)~第六回 消息组件~续
  7. JNI编程(二) —— 让C++和Java相互调用(1)
  8. Linux kernel ‘qeth_snmp_command’函数缓冲区溢出漏洞
  9. Android开发工具GenyMotion安装和使用方法
  10. STL迭代器与部分算法学习笔记
  11. 编写JQuery插件-2
  12. Dynamics CRM 窗体Javascript获取时间字段值的准确转换
  13. tomcat的catalina.out日志按自定义时间日式进行分割
  14. 在socket的server端处理client端发来的数据
  15. jsp3
  16. 向kafka批量发送已存在的txt文件
  17. 小峰servlet/jsp(7)jstl国际化标签库、sql标签库等
  18. SQL中字符串截取、连接、替换等函数的用法
  19. Spring @Transaction配置演示样例及发生不回滚原因深度剖析
  20. Python开发基础-Day32 进程间通信、进程池、协程

热门文章

  1. Docker编排利器DockerCompose
  2. P5147-数学-随机数生成器
  3. P2014选课
  4. Power Apps 画布应用中非可委派函数查询数量限制
  5. 福利!Python制作动态字符画(附源码)
  6. Webstorm 快速补全
  7. 洛谷P5691题解
  8. Java方法03——方法的重载
  9. RHCSA_DAY03
  10. 『Java』接口的使用方法