RandomAceessFile类

RandomAccessFile类是一个专门读写文件的类,封装了基本的IO流,在读写文件内容方面比常规IO流更方便、更灵活。但也仅限于读写文件,无法像IO流一样,可以传输内存和网络中的数据。

RandomAccessFile常用方法和使用方式

  • getFilePointer() :获取当前文件的记录指针位置
  • seek(long pos):把记录指针移到pos处
  • read()和write():读取内容和写入内容
  • readXxx()和writeXxx():用于处理各种值类型
  • writeBytes()和writeChars()可以写入字符串,编码不一致会造成乱码。所以推荐String.getBytes(),用write()来写入。
总体来说,如果只处理文件的话,使用RandomAccessFile很方便,而且读写方法和IO流都差不多,只是针对不同类型数据进行扩展,使用简单明了。最重要的就是该类的seek()方法,该方法可以指定读写的位置。还有该类构造器需要一个参数来确定使用什么模式。 
r:只读模式
rw:读写模式
rwd:和rw差不多,但需要对文件内容每个更新都进行同步。

代码示例:

(一)RandomAccessFile读取文件内容
        //rw : 设置模式为读写模式
RandomAccessFile raf = new RandomAccessFile("D:\\reviewIO\\runtime.txt","rw");
System.out.println("当前记录指针位置:" + raf.getFilePointer());
byte[] buf = new byte[];
int len = ;
while((len = raf.read(buf)) != -) {
System.out.println(new String(buf));
}
(二)RandomAccessFile写入数据到文件中
public class Test {
public static void main(String[] args) throws IOException {
//要读写的数据源
File f = new File("D:\\reviewIO\\RandomAccessFileTest.txt");
//键盘输入作为数据来源
Scanner sc = new Scanner(System.in);
//指定文件不存在就创建同名文件
if(!f.exists()) f.createNewFile(); //rw : 设为读写模式
RandomAccessFile raf = new RandomAccessFile(f,"rw");
System.out.println("当前记录指针位置:" + raf.getFilePointer()); while(true) {
String str = sc.next();
raf.writeBytes(str);
System.out.println("当前记录指针位置:" + raf.getFilePointer());
//输入end结束循环
if(str.equals("end")) break;
} }
}
  • 使用小结:RandomAccessFile写入数据到文件中不会覆盖文件内容。只要程序每运行一次,该类的记录指针总是为0,这意味着从文件最前端开始读写,所以需要注意。
(三)RandomAccessFile的记录指针放在文件尾部,用于添加内容
public class Test {
public static void main(String[] args) throws IOException {
//读写的数据源
File f = new File("D:\\reviewIO\\RAF.txt");
//指定文件不存在就创建同名文件
if(!f.exists()) f.createNewFile();
//rw : 设为读写模式
RandomAccessFile raf = new RandomAccessFile(f,"rw");
System.out.println("当前记录指针位置:" + raf.getFilePointer());
//记录指针与文件内容长度相等
raf.seek(raf.length());
System.out.println("当前文件长度:" + raf.length());
//以字节形式写入字符串
raf.write("ABCDEFG写入尾部".getBytes());
System.out.println("当前记录指针位置:" + raf.getFilePointer());
}
}
  • 使用小结:如果使用RandomAccessFile添加内容,要把记录指针设为同文件一样的长度,保证在文件的尾部进行写入数据。write()写入中文,使用String.getByte(),保证两者编码一致。

RandomAccessFile类——高效快捷地读写文件的更多相关文章

  1. 第31天学习打卡(File类。字符流读写文件)

    File类 概念 文件,文件夹,一个file对象代表磁盘上的某个文件或者文件夹 构造方法  File(String pathname) File(String parent,String child) ...

  2. RandomAccessFile、FileChannel、MappedByteBuffer读写文件

    s package com.nio; import java.io.Closeable; import java.io.FileNotFoundException; import java.io.IO ...

  3. 在对文件进行随机读写,RandomAccessFile类,如何提高其效率

    花1K内存实现高效I/O的RandomAccessFile类 JAVA的文件随机存取类(RandomAccessFile)的I/O效率较低.通过分析其中原因,提出解决方案.逐步展示如何创建具备缓存读写 ...

  4. JavaIO流(02)RandomAccessFile类详解

    RandomAccessFile类 该类主要是对文件内容进行操作,可以随机的读取一个文件中指定位置的数据: 但是如果想实现这样的功能,则每个数据的长度应该保持一致:   构造方法:   接受File类 ...

  5. 通过扩展RandomAccessFile类使之具备Buffer改善I/O性能--转载

    主体: 目前最流行的J2SDK版本是1.3系列.使用该版本的开发人员需文件随机存取,就得使用RandomAccessFile类.其I/O性能较之其它常用开发语言的同类性能差距甚远,严重影响程序的运行效 ...

  6. 【Java IO流】RandomAccessFile类的使用

    RandomAccessFile类的使用 RandomAccessFile类是java提供的对文件内容的访问,既可以读文件,也可以写文件. 支持随机访问文件,可以访问文件的任意位置. RandomAc ...

  7. Java RandomAccessFile类

    RandomAccessFile类是Java中操作文件内容功能最强大的类,既可以读,也可以写. RandomAccessFile支持随机访问,可以直接访问文件的任意位置,在文件的任意位置读写数据.如果 ...

  8. 使用RandomAccessFile类对文件进行读写

    1. RandomAccessFile类简介   前面一篇随笔<File类遍历目录及文件>中有说到,File类只能用于表示文件或目录的名称.大小等信息,而不能用于文件内容的访问.而当需要访 ...

  9. FileUtils【获取SD卡根目录、读写文件、移动、复制、删除文件、获取文件名、后缀名操作类】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 封装了获取SD卡根目录路径.以及对文件读写.获取文件名等相关操作. 因为需要用到android.permission.READ_EX ...

随机推荐

  1. 【es6】Generator 函数

    1. 基本概念 状态机,封装了多个内部状态 2. 应用 返回一个遍历器对象. 3. 代码形式 function* helloWorldGenertor() { yield 'hello'; yield ...

  2. ASP.NET Page执行顺序如:OnPreInit()、OnInit()……

    using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security ...

  3. Python学习---django下的cookie操作 180201

    什么是Cookies 什么是Cookies cookies设置的原因: 1. http请求的无记忆性: 2.加快访问速度  3. 减少服务器压力 cookies特点: cookies保存在客户端浏览器 ...

  4. JAXB实现java对象与xml之间转换

    JAXB简介: 1.JAXB能够使用Jackson对JAXB注解的支持实现(jackson-module-jaxb-annotations),既方便生成XML,也方便生成JSON,这样一来可以更好的标 ...

  5. 沉淀再出发:java中注解的本质和使用

    沉淀再出发:java中注解的本质和使用 一.前言 以前XML是各大框架的青睐者,它以松耦合的方式完成了框架中几乎所有的配置,但是随着项目越来越庞大,XML的内容也越来越复杂,维护成本变高.于是就有人提 ...

  6. FTP(文件传输协议)工作原理

    目前在网络上,如果你想把文件和其他人共享.最方便的办法莫过于将文件放FTP服务器上,然后其他人通过FTP客户端程序来下载所需要的文件. 1.FTP架构 如同其他的很多通讯协议,FTP通讯协议也采用客户 ...

  7. Spark 2.x 中 Sort-Based Shuffle 产生的内幕

    本课主题 Sorted-Based Shuffle 的诞生和介绍 Shuffle 中六大令人费解的问题 Sorted-Based Shuffle 的排序和源码鉴赏 Shuffle 在运行时的内存管理 ...

  8. 深入浅出SharePoint——使用WinDbg进行调试

  9. December 22nd 2016 Week 52nd Thursday

    The best hearts are always the bravest. 心灵最高尚的人,往往也是最勇敢的人. Keep conscience clear, don't let too many ...

  10. ZT 分智网博客 – 职场、面试技巧、职业规划

    http://blog.fenzhi.com/archives/5148.html 分智网博客 – 职场.面试技巧.职业规划 软件工程师职位薪酬最高的25家中国公司 作者: 分智网 日期: 2013 ...