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. 转:centos7.2安装jdk1.6和/etc/profile不生效问题

    转:centos7.2安装jdk1.6和/etc/profile不生效问题 转自:http://blog.csdn.net/cuker919/article/details/54178611 一.查看 ...

  2. 【Android Studio使用教程1】Android Studio导入项目的几种方法

    本篇教程中使用到的Android Studio版本为1.0, Eclipse ADT版本23.0.4.请尝试更新到该版本. Android Studio默认使用 Gradle 构建项目, Eclips ...

  3. PHP中die()、exit()、return的区别

    1.die()是exit()的别名函数,用法与exit()完全相同,php手册上的说法是,“使用这种别名通常不是个好主意,因为这种别名可能会被完全废弃或更名,导致脚本难以移植到新版本的 PHP 上.” ...

  4. maven(12),排除冲突JAR包

     JAR包冲突 <dependencies> <dependency> <groupId>org.springframework</groupId> ...

  5. Linux案例01:eth0网卡异常

    一.现象描述 今天在调试两台物理机,做完配置重启主机后,发现一台服务器网络无法ssh连接,通过ILO进去ifconfig发现eth0配置的IP地址等信息丢失,手动重启后,可以ssh连接,但过一段时间, ...

  6. SqlServer数据库(可疑)的解决办法

    当数据库发生这种操作故障时,可以按如下操作步骤可解决此方法, 打开数据库里的Sql 查询编辑器窗口,运行以下的命令. // 1.使用指定值强制重新配置:(1.0表示为真假) sp_configure ...

  7. C# 表达式树 创建、生成、使用、lambda转成表达式树~表达式树的知识详解

    笔者最近学了表达式树这一部分内容,为了加深理解,写文章巩固知识,如有错误,请评论指出~ 表达式树的概念 表达式树的创建有 Lambda法 和 组装法. 学习表达式树需要 委托.Lambda.Func& ...

  8. C++通过Callback向C#传递数据

    现在比较流行C#与C++融合:C#做GUI,开发效率高,C++做运算,运行效率高,二者兼得. 但是C++与C#必然存在数据交互,C#与C++dll的数据交互从来都是一个让人头疼的问题. 从调用方式看也 ...

  9. 转自csdn:计算机启动过程

    启动第一步--加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信 息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它.这是因为BIOS中 包含了CPU的相关信息.设备启动顺序信息 ...

  10. Python 执行命令行操作。

    os.system os.popen() commands.getstatusoutput(cmd) (status, output) = commands.getstatusoutput('cat ...