RandomAccessFile:  

  认识:java输入/输出流体系中功能最丰富的文件内容访问类 既可以读取文件内容,也可以向文件传输数据,并且支持“随机访问“的方式,程序可以跳转到任意地方来读写数据。

  特点:与OutputStream/Writer不同,RandomAccessFile允许自由定位记录指针,可以不从开始的地方输出,因此RandomAccessFile可以向已经存在的文件后追加内容,如果程序需要向已经存在的文件后追加内容,应该使用RandomAccessFile

  局限:只能读写文件,不能读写其他IO节点

RandomAccessFile 两个方法操作文件记录指针

  long getFilePointer()  返回文件记录指针的当前位置
  void seek(long pos)  将文件记录指针定位到pos位置

RandomAccessFile类为用户提供了两种构造方法:两种方法一个意思,一个是File指定,一个是String指定文件名

  RandomAccessFile(File file, String mode)
  RandomAccessFile(String name, String mode)

mode的四个值如下:

模    式 作    用
r 表示以只读方式打开,调用结果对象的任何write方法都将导致抛出IOException
rw 打开以便读取和写入,如果该文件尚不存在,则尝试创建该文件
rws 打开以便读取和写入,相对于"rw",还要求对文件内容或元数据的每个更新都同步写入到底层存储设备
rwd 打开以便读取和写入,相对于"rw",还要求对文件内容的每个更新都同步写入到底层存储设备

  

public class File03 {public static void main(String[] args) throws IOException {RandomAccessFile raf = new RandomAccessFile("D://demo/a.txt", "r");//初始位置为0System.out.println("RandomAccessFile文件指针初始位置:" + raf.getFilePointer());raf.seek(10);byte[] bbuf = new byte[1024];int hasRead = 0;while((hasRead = raf.read(bbuf)) > 0) {System.out.println(new String(bbuf , 0  , hasRead));}}
}

往文件最后追加内容:

     //往文件里面追加内容RandomAccessFile raf = new RandomAccessFile("D://demo/a.txt", "rw");raf.seek(raf.length());raf.write("这是追加的内容".getBytes());

往文件中间指定的位置添加内容:

  RandomAccessFile不能向文件指定的内容插入内容,如果直接插,要把指定指针后的内容先读入一个临时的地方存起来, 插入需要的内容后, 再去将临时存储的内容读过来。

  /*** 使用RandomAccessFile 向文件指定的位置添加内容* @throws IOException */public static void insert(String fileName , long pos , String insertContent) throws IOException {File temp = File.createTempFile("temp", null);temp.deleteOnExit(); //jvm 退出时删除临时文件
        FileOutputStream tempOut = new FileOutputStream(temp);FileInputStream tempIn = new FileInputStream(temp);RandomAccessFile raf = new RandomAccessFile(fileName, "rw");System.out.println(raf.length());raf.seek(pos);//将插入点后的内容读取到临时文件byte[] bbuf = new byte[100];int hasRead = 0;while((hasRead = raf.read(bbuf)) > 0) {tempOut.write(bbuf, 0, hasRead);}//重新回到插入点 , 将需要添加的内容添加到到文件
        raf.seek(pos);raf.write(insertContent.getBytes());//将临时文件中的内容添加到原文件当中while((hasRead = tempIn.read(bbuf)) > 0) {raf.write(bbuf, 0, hasRead);}}public static void main(String[] args) throws IOException {insert("D://demo/a.txt", 10 , "这是追加到文件中间的内容");}

转载于:https://www.cnblogs.com/Uzai/p/9647813.html

Java IO 4 : RandomAccessFile相关推荐

  1. Java IO的RandomAccessFile的使用(转)

    现有如下的一个需求,向已存在1G数据的txt文本里末尾追加一行文字,内容如下"Lucene是一款非常优秀的全文检索库".可能大多数朋友会觉得这个需求很easy,说实话,确实easy ...

  2. Java I/O流(二)——File,Properties,PrintWriter,IO ,RandomAccessFile,ByteBuffer,nio

    File概述 文件的操作是非常重要的,我们先来看下他的基本概念 •用于将文件或者文件夹封装成对象 •方便对文件和文件夹的操作 •File对象可以作为参数传递给流的构造函数 我们写个小例子先 impor ...

  3. JAVA IO - RandomAccessFile Seek学习

    2019独角兽企业重金招聘Python工程师标准>>> JAVA IO - RandomAccessFile Seek学习 import java.io.RandomAccessFi ...

  4. Java IO: RandomAccessFile

    转载自   Java IO: RandomAccessFile 译文链接 作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) RandomAccessFi ...

  5. JAVA IO - RandomAccessFile

    2019独角兽企业重金招聘Python工程师标准>>> RandomAccessFile The RandomAccessFile class in the Java IO API ...

  6. java openfile busy_android java.io.IOException: open failed: EBUSY (Device or resource busy)

    今天遇到一个奇怪的问题, 测试在程序的下载界面,下载一个文件第一次下载成功,删除后再下载结果下载报错, 程序:file.createNewFile(); 报错:java.io.IOException: ...

  7. java urlconn 下载慢_使用HttpURLConnection下载文件时出现 java.io.FileNotFoundException彻底解决办法...

    import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.RandomAc ...

  8. [零基础学JAVA]Java SE应用部分-27.Java IO操作(01)

    JAVA IO操作目标 本季知识点 1.File类 2.RandomAccessFile类 File类 在JAVA中所有的IO操作全部存放在java.io包中. File是唯一一个与文件本身有关的操作 ...

  9. Java IO 性能优化大PK,什么场景用啥,都给你总结好啦!

    作者:莫那·鲁道 ,来自:http://thinkinjava.cn 前言 Java 在 JDK 1.4 引入了 ByteBuffer 等 NIO 相关的类,使得 Java 程序员可以抛弃基于 Str ...

最新文章

  1. 使用Windows 2008证书服务器为智能卡颁发证书
  2. Eclipse下新建Maven项目、自动打依赖jar包
  3. MySQL - 锁机制初探
  4. lower_bound upper_bound
  5. libcurl linux 静态链接库_Linux学习:Makefile 模板(动态库、静态库、可执行程序)...
  6. Flex的事件(十四)
  7. 2015《大数据》读者意见征集活动——幸运读者名单
  8. 神奇的python(四)之logging日志文件系统
  9. SpringMVC 传递相同名称的参数的最佳方法
  10. IBM HMC V7R740虚拟机安装实战
  11. mysql like 大小写_mysql - 如何使用LIKE通配符在列中搜索(不区分大小写)?
  12. 烽火吉比特HG261GU获取超级密码教程
  13. Axure安装、破解、汉化一条龙
  14. Z-TEK CE usb转串口驱动(win32)
  15. 教你快速打粤语正字 讯飞输入法语音输入1分钟400字
  16. linux强制删除文件夹
  17. 新美域杂志新美域杂志社新美域编辑部2022年第6期目录
  18. 讯飞、有道、谷歌、微软语音sdk集成总结
  19. 天长地久 (20分)
  20. 【302期】SpringBoot 项目鉴权的 4 种方式,你了解吗?

热门文章

  1. VC6迁移到VS2008几个问题——良好的代码,从我做起,从现在开始。
  2. 分享一个C#使用AT指令控制语音猫的例子
  3. 服务器云ide_语言服务器协议如何影响IDE的未来
  4. python如何编写数据库_如何在几分钟内用Python编写一个简单的玩具数据库
  5. 1057 Stack
  6. 1035 插入与归并
  7. 青岛中专学计算机哪个学校比较好,青岛最好的中专学校是哪个
  8. vba保存文件为xlsx格式_Vba把Excel某个范围保存为XLS工作薄文件
  9. Vue的模板语法学习
  10. 《树莓派Python编程指南》——2.3 小结