java-io之RandomAccessFile
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相关推荐
- Java IO 4 : RandomAccessFile
RandomAccessFile: 认识:java输入/输出流体系中功能最丰富的文件内容访问类 既可以读取文件内容,也可以向文件传输数据,并且支持"随机访问"的方式,程序可以跳转到 ...
- Java IO的RandomAccessFile的使用(转)
现有如下的一个需求,向已存在1G数据的txt文本里末尾追加一行文字,内容如下"Lucene是一款非常优秀的全文检索库".可能大多数朋友会觉得这个需求很easy,说实话,确实easy ...
- Java I/O流(二)——File,Properties,PrintWriter,IO ,RandomAccessFile,ByteBuffer,nio
File概述 文件的操作是非常重要的,我们先来看下他的基本概念 •用于将文件或者文件夹封装成对象 •方便对文件和文件夹的操作 •File对象可以作为参数传递给流的构造函数 我们写个小例子先 impor ...
- JAVA IO - RandomAccessFile Seek学习
2019独角兽企业重金招聘Python工程师标准>>> JAVA IO - RandomAccessFile Seek学习 import java.io.RandomAccessFi ...
- Java IO: RandomAccessFile
转载自 Java IO: RandomAccessFile 译文链接 作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) RandomAccessFi ...
- JAVA IO - RandomAccessFile
2019独角兽企业重金招聘Python工程师标准>>> RandomAccessFile The RandomAccessFile class in the Java IO API ...
- java openfile busy_android java.io.IOException: open failed: EBUSY (Device or resource busy)
今天遇到一个奇怪的问题, 测试在程序的下载界面,下载一个文件第一次下载成功,删除后再下载结果下载报错, 程序:file.createNewFile(); 报错:java.io.IOException: ...
- java urlconn 下载慢_使用HttpURLConnection下载文件时出现
java.io.FileNotFoundException彻底解决办法...
import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.RandomAc ...
- [零基础学JAVA]Java SE应用部分-27.Java IO操作(01)
JAVA IO操作目标 本季知识点 1.File类 2.RandomAccessFile类 File类 在JAVA中所有的IO操作全部存放在java.io包中. File是唯一一个与文件本身有关的操作 ...
- Java IO 性能优化大PK,什么场景用啥,都给你总结好啦!
作者:莫那·鲁道 ,来自:http://thinkinjava.cn 前言 Java 在 JDK 1.4 引入了 ByteBuffer 等 NIO 相关的类,使得 Java 程序员可以抛弃基于 Str ...
最新文章
- Spring boot ----RestTemplate学习笔记
- 魅族适配鸿蒙吗,魅族智能生活发布会新增看点:接入鸿蒙操作系统
- gdi 中发生一般性错误_SMC/SMD波峰焊接过程中的注意事项分析
- React Native ios打包
- linux怎么使用cal命令,Linux cal命令
- android自定义dialog不显示,Android 自定义的dialog显示不正常呢,怎么回事???
- FastDFS单机版安装教程
- ACM PKU 1111 Image Perimeters http://acm.pku.edu.cn/JudgeOnline/problem?id=1111
- 学习笔记之搜索引擎—原理、技术与系统
- 开发一款即时通讯App,从这几步开始
- Friend List
- Layui layer.open 弹窗 关闭按钮不见了?
- 毕设题目:Matlab优化充电
- yiisoft/yii2-imagine 使用方法
- ArcHydroTools 10.5版本的安装与使用(附下载链接与教程)
- 服务器光猫一直亮不响应,光猫光信号正常,且光猫和路由器都重启过,还是上不了网咋办?...
- GIC/ITS代码分析(0)GIC/ITS框架介绍
- 论文阅读笔记-场景图谱-图谱生成:Scene Graph Generation from Objects, Phrases and Region Captions
- MySQL查看数据库状态命令详解
- php基础教程推荐,php基础教程-绝对推荐
热门文章
- GreenPlum的并行查询优化策略
- xp文件夹怎么设置密码?压缩文件及Office文件加密方法
- c#在WinForm中重写ProgressBar控件(带%的显示)
- 配置Exchange 2010邮箱和邮件大小限制
- 用 Go 语言,做 Web 编程开发
- html转换成keynote,keynote代码高亮【转】
- java文件复制速度_java中文件复制得速度测试
- linux windows爆音,升级Windows 10后 部分情况下有爆音,杂音,音频卡顿现象
- RDBMS 与 非RDBMS
- MyBatis 源码解读-typeHandlerElement()