Java RandomAccessFile类
RandomAccessFile类是Java中操作文件内容功能最强大的类,既可以读,也可以写。
RandomAccessFile支持随机访问,可以直接访问文件的任意位置,在文件的任意位置读写数据。如果要随机访问文件内容,RandomAccessFile是很好的选择。
Random,意为随机、任意,RandomAccessFile,即可访问文件的任意位置;RAM(Random Access Memory),即可访问文件/数据任意位置的内存。
构造函数:
- RandomAccessFile(String filePath, String mode)
- RandomAccessFile(File file, String mode)
mode是一个字符串,指定文件打开方式。可能的值:
- “r” 只读,若文件不存在,会报错
- “rw” 读写,若文件不存在,会自动创建。只要有write权限,文件不存在时都会自动创建。
- “rwd” 读写,对文件内容的每个更新都会同步写到底层IO设备
- “rws” 读写,对文件内容、元数据的每个更新,都会同步写入底层IO设备。
RandomAccessFile提供了多种读写数据的方法,能读写多种类型的数据,既能以字符方式进行读写,又能以字节方式进行读写。
RandomAccessFile提供了2个操作记录指针的方法,用于支持随机读写:
- long getFilePointer() 返回文件记录指针的当前位置
- void seek(long position) 将文件指针跳转到指定位置
InputStream类、Reader类也提供了操作指针的方法,但操作的指针都是读指针,只能在输入流中使用。OutputStream类、Writer类不能操作指针。可以随机读,不能随机写。
RandomAccessFile操作的指针是读写指针,可以在读的时候操作指针,也可以在写的时候操作指针,可以随机读写。
说明:
- RandomAccessFile只能操作文件内容(读写),不能对文件本身进行操作(修改文件名、删除等),也不能访问文件的其他信息,比如最后修改时间,但可以访问文件大小(内容长度)。
- RandomAccessFile,这里的File只指文件,不包括文件夹,即只能操作文件。
- RandomAccessFile不能在指定位置插入内容,指针跳转到指定位置,写入内容,会覆盖原有的内容,并不是插入。要实现插入,需要借助一个中间容器,可以将后面的内容读到一个大的byte[]中,或者新建一个临时文件来保存,指针跳转到指定位置开始写,然后再把byte[]或者临时文件中的内容写入。
使用RandomAccessFile实现多线程断点传输、下载(比如迅雷):
1、开始时建立2个文件,通过File类的静态方法createTempFile()创建一个同等大小的空的临时文件,再创建一个文本文件用于记录每个文件指针的位置
2、启动多个线程,每个线程只负责一小节内容的下载。每个线程使用一个单独的byte[]、网络输入流对象、RandomAccessFile对象(向临时文件中写入数据,要随机写)、文件指针(网络输入流对象、RandomAccessFile对象使用的文件指针位置是相同的),使用循环从网络中读取数据,存储在byte[]中,将byte[]中的数据写入到临时文件中。
3、由于用户点击暂停、网络中断、退出程序等原因导致下载中断时,要将每个线程的文件指针位置保存到文本文件中,继续下载时先从文本文件中读取每个线程的指针位置,将每个线程的文件指针位置设置为对应的值(网络输入流对象、RandomAccessFile对象都要设置),然后启动多线程继续下载。
4、完成后重命名临时文件为源文件名。
较忙,以后再补源码。
Java RandomAccessFile类的更多相关文章
- java RandomAccessFile类(随机访问文件)
该类可以实现对同一个文件的读写操作,与其他IO流不同的是可以指定读写指针的脚标(seek),有跳过指定个数字节(skipBytes)操作. 另外该类也可用于断点续传. 简单示例如下: import j ...
- [Java IO]01_File类和RandomAccessFile类
File类 File类是java.io包中唯一对文件本身进行操作的类.它可以进行创建.删除文件等操作. File类常用操作 (1)创建文件 可以使用 createNewFille() 创建一个新文 ...
- java基础知识回顾之javaIO类--RandomAccessFile类
java.io 类 RandomAccessFile java.lang.Object java.io.RandomAccessFile1.该类不是IO流中的子类.2.该类既能读又能写.3.该对象内部 ...
- 【Java IO流】RandomAccessFile类的使用
RandomAccessFile类的使用 RandomAccessFile类是java提供的对文件内容的访问,既可以读文件,也可以写文件. 支持随机访问文件,可以访问文件的任意位置. RandomAc ...
- Java基础(二十八)Java IO(5)RandomAccessFile类与过滤器流(Filter Stream)
一.RandomAccessFile类 使用RandomAccessFile类可以读取任意位置数据的文件. 1.构造方法 RandomAccessFile(String name, String mo ...
- Java基础 使用转换流进行文件的复制 / RandomAccessFile 类进行文件的复制
笔记: **使用转换流进行文件的复制 文本文件---字节流FileInputStream--> [InputStreamReader] -----字符流BufferedReader------ ...
- Java RandomAccessFile用法
RandomAccessFile RandomAccessFile是用来访问那些保存数据记录的文件的,你就可以用seek( )方法来访问记录,并进行读写了.这些记录的大小不必相同:但是其大小和位置必须 ...
- RandomAccessFile类
File类只是针对文件本身进行操作,而如果要对文件内容进行操作,则可以使用RandomAccessFile类,此类属于随机读取类,可以随机地读取一个文件中指定位置的数据. //============ ...
- DataInputStream类和RandomAccessFile类的使用方法
// DataInputStream类实现了DataInput接口,要想从文件中读入二进制数据, // 你需要将DataInputStream与某个字节源相结合,例如FileInputStream / ...
随机推荐
- ubuntu 16.04下如何打造 sublime python编程环境
一.安装python3 ubuntu自身是安装python2的,例如在ubuntu 16.04中安装的就是python2.7.但我想在python3的环境下进行开发所以就要安装python3. ...
- ACM/ICPC 2018亚洲区预选赛北京赛站网络赛 A.Saving Tang Monk II(优先队列广搜)
#include<bits/stdc++.h> using namespace std; ; ; char G[maxN][maxN]; ]; int n, m, sx, sy, ex, ...
- 蓝桥--2n皇后问题(递归)--搬运+整理+注释
N皇后问题: #include <iostream> #include <cmath> using namespace std; int N; ];//用来存放算好的皇后位置. ...
- 笔记-python-实用-程序运算时间计算
方法1 import datetime starttime = datetime.datetime.now() #long running endtime = datetime.datetime.no ...
- spring boot配置
spring.application.name=XXXXXserver.port=9515 # health显示down的问题endpoints.health.sensitive= falsemana ...
- rocketmq源码分析2-broker的消息接收
broker消息接收,假设接收的是一个普通消息(即没有事务),此处分析也只分析master上动作逻辑,不涉及ha. 1. 如何找到消息接收处理入口 可以通过broker的监听端口10911顺藤摸瓜式的 ...
- 2017"百度之星"程序设计大赛 - 初赛(A)
小C的倍数问题 Accepts: 1990 Submissions: 4931 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 327 ...
- Jupyter Notebook与Jupyterhub的安装与配置
Jupyter Notebook是一个很好用的交互环境,Jupyterhub则在此基础上实现了多用户的管理.最近配置这个环境的时候也遇到了一些坑,想想自己疯狂百度的过程,在此把自己的完整安装配置流程记 ...
- Docker网络基础:快速指南
Docker网络基础:快速指南 原文连接:http://blogxinxiucan.sh1.newtouch.com/2017/07/30/Docker网络基础:快速指南/ 了解有关扩展网络功能的默认 ...
- iOS-----openGL--openGL ES iOS 入门篇--->搭建openGL环境
OpenGL版本 iOS系统默认支持OpenGl ES1.0.ES2.0以及ES3.0 3个版本,三者之间并不是简单的版本升级,设计理念甚至完全不同,在开发OpenGL项目前,需要根据业务需求选择合适 ...