2019独角兽企业重金招聘Python工程师标准>>>

RandomAccessFile

java提供了一个可以对文件随机访问的操作,访问包括读和写操作。

该类名为RandomAccessFile。该类的读写是基于指针的操作。

RandomAccessFile在对文件进行随机访问操作时有两个模式,

分别为只读模式(r),和读写模式(rw)

在创建RandomAccessFile时,需要给传入加两个参数:

1、 操作的文件(文件路径String,File 对象) 如果文件不存在,自动创建

2、 读写模式

public static void main(String[] args) {try {RandomAccessFile raf=new RandomAccessFile("data.bat", "rw");//返回此文件中的当前偏移量。long point=raf.getFilePointer();System.out.println(point);// 4+16*6=96+4raf.seek(100);//01111111(1+2+4+8+16+32+64)//把int的低八位写入到文件中raf.write(1);System.out.println("现在的指针位置:"+raf.getFilePointer());raf.write("i love you".getBytes());/*** 读写完毕后要关闭流,释放资源*/raf.close();} catch (Exception e) {e.printStackTrace();}}
/*** 如果读到文件末尾,那么会报EOFException,(End of File),文件末尾返回-1* @author king-pan**/
public class RandomAccessFileDemo02 {/*** @param args*/public static void main(String[] args) {try {RandomAccessFile raf=new RandomAccessFile("data.bat", "rw");raf.seek(100);int i=raf.read();System.out.println(i);raf.close();} catch (Exception e) {e.printStackTrace();}}
}

文件的copy--原理:

/*** 使用RandomAccessFile实现文件复制* 步骤:* 1. 创建一个RandomAccessFile用于读取原文件* 2. 创建一个RandomAccessFile用于写到目标文件* 3. 循环一下操作:*    3.1:从原文件兑取一个字节*  3.2:将该字节写入到目标文件中*  退出条件: 当读取的值为-1时,到达文件末尾,结束*  * 4. 关闭流,释放资源* @author king-pan**/
public class CopyDemo {public static void main(String[] args) throws Exception{RandomAccessFile srcFile=new RandomAccessFile("Linux.txt", "r");RandomAccessFile descFile=new RandomAccessFile("LinuxCopy.txt", "rw");int val=-1;while((val=srcFile.read())!=-1){descFile.write(val);}srcFile.close();descFile.close();}
}

文件copy的优化:

/*** 使用RandomAccessFile实现文件复制(高效率)* 步骤:* 1. 创建一个RandomAccessFile用于读取原文件* 2. 创建一个RandomAccessFile用于写到目标文件* 3. 循环一下操作:(在读写操作过程中优化)*    3.1:从原文件兑取一个字节*  3.2:将该字节写入到目标文件中*  退出条件: 当读取的值为-1时,到达文件末尾,结束*  * 4. 关闭流,释放资源* @author king-pan**/
public class CopyDemo02 {public static void main(String[] args) throws Exception{RandomAccessFile srcFile=new RandomAccessFile("Linux.txt", "r");RandomAccessFile descFile=new RandomAccessFile("LinuxCopy.txt", "rw");byte [] buf=new byte[1024*10];//数组10kb的容量/** int read(byte[] b)* 一次性读取byte[]长度个字节,并将这些字节存入该数组。* 返回值为实际读取道德字节量* 若返回值为-1,说明这一次没有读到任何字节,也就是文件读到末尾了*/int length=-1;//测试效率 开始时间long start=System.currentTimeMillis();while((length=srcFile.read(buf))!=-1){/** 将给定数组中的所有内容写入到文件中* 最后一次写入可能length小于数组的长度*/descFile.write(buf,0,length);}//复制完后的时间long end=System.currentTimeMillis();System.out.println("耗时:"+(end-start));srcFile.close();descFile.close();}
}

RandomAccessFile对基本类型的读写操作:

public static void write(){try {RandomAccessFile raf=new RandomAccessFile("test.bat","rw");int max=Integer.MAX_VALUE;/*** 右移运算  * raf.write(max>>>24);* raf.write(max>>>16);* raf.write(max>>>8);* raf.write(max); */raf.writeByte(Byte.MAX_VALUE);raf.writeBoolean(Boolean.TRUE);raf.writeChar(Character.MAX_CODE_POINT);raf.writeShort(Short.MAX_VALUE);//完整的写入了一个intraf.writeInt(max);raf.writeLong(Long.MAX_VALUE);raf.writeFloat(Float.MAX_VALUE);raf.writeDouble(Double.MAX_VALUE);raf.close();} catch (Exception e) {e.printStackTrace();}}public static void read(){try {RandomAccessFile raf=new RandomAccessFile("test.bat","rw");byte b=raf.readByte();boolean bl=raf.readBoolean();char c=raf.readChar();short s=raf.readShort();int i=raf.readInt();long l=raf.readLong();float f=raf.readFloat();double d=raf.readDouble();System.out.println("byte:"+b);System.out.println("boolean:"+bl);System.out.println("char:"+c);System.out.println("short:"+s);System.out.println("int:"+i);System.out.println("long:"+l);System.out.println("float:"+f);System.out.println("double:"+d);raf.close();} catch (Exception e) {e.printStackTrace();}}

转载于:https://my.oschina.net/KingPan/blog/322917

java-io之RandomAccessFile相关推荐

  1. Java IO 4 : RandomAccessFile

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

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

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

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

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

  4. JAVA IO - RandomAccessFile Seek学习

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

  5. Java IO: RandomAccessFile

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

  6. JAVA IO - RandomAccessFile

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

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

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

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

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

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

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

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

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

最新文章

  1. Spring boot ----RestTemplate学习笔记
  2. 魅族适配鸿蒙吗,魅族智能生活发布会新增看点:接入鸿蒙操作系统
  3. gdi 中发生一般性错误_SMC/SMD波峰焊接过程中的注意事项分析
  4. React Native ios打包
  5. linux怎么使用cal命令,Linux cal命令
  6. android自定义dialog不显示,Android 自定义的dialog显示不正常呢,怎么回事???
  7. FastDFS单机版安装教程
  8. ACM PKU 1111 Image Perimeters http://acm.pku.edu.cn/JudgeOnline/problem?id=1111
  9. 学习笔记之搜索引擎—原理、技术与系统
  10. 开发一款即时通讯App,从这几步开始
  11. Friend List
  12. Layui layer.open 弹窗 关闭按钮不见了?
  13. 毕设题目:Matlab优化充电
  14. yiisoft/yii2-imagine 使用方法
  15. ArcHydroTools 10.5版本的安装与使用(附下载链接与教程)
  16. 服务器光猫一直亮不响应,光猫光信号正常,且光猫和路由器都重启过,还是上不了网咋办?...
  17. GIC/ITS代码分析(0)GIC/ITS框架介绍
  18. 论文阅读笔记-场景图谱-图谱生成:Scene Graph Generation from Objects, Phrases and Region Captions
  19. MySQL查看数据库状态命令详解
  20. php基础教程推荐,php基础教程-绝对推荐

热门文章

  1. GreenPlum的并行查询优化策略
  2. xp文件夹怎么设置密码?压缩文件及Office文件加密方法
  3. c#在WinForm中重写ProgressBar控件(带%的显示)
  4. 配置Exchange 2010邮箱和邮件大小限制
  5. 用 Go 语言,做 Web 编程开发
  6. html转换成keynote,keynote代码高亮【转】
  7. java文件复制速度_java中文件复制得速度测试
  8. linux windows爆音,升级Windows 10后 部分情况下有爆音,杂音,音频卡顿现象
  9. RDBMS 与 非RDBMS
  10. MyBatis 源码解读-typeHandlerElement()