
RandomAccessFile学习笔记
发布日期:2021-05-06 23:31:45
浏览次数:19
分类:精选文章
本文共 2454 字,大约阅读时间需要 8 分钟。
简介
RandomAccessFile是一个神奇的存在,既可以从文件中读,又可以向文件输出数据。另外还支持“随机访问”,可以直接跳转到文件的任意位置来读写数据。
RandomAccessFile还可以自由定义指针,可向已经存在的文件内追加内容。但是,它只能读写文件,不能操作其他IO节点。RandomAccessFile中的方法
1.构造方法
RandomAccessFile(File file, String mode)//使用File参数指定文件本身RandomAccessFile(String name, String mode)//使用String参数指定文件名
对于构造方法的mode参数,他指定了RandomAccessFile的访问模式:
“r”:以只读方式打开,调用任何write方法都会导致IOException “rw”:打开以便读取和写入,若文件不存在就尝试创建 “rws”:打开以便读取和写入,相对于"rw",还要求对文件内容或元数据的每个更新都同步写入到底层存储设备 “rwd”:打开以便读取和写入,相对于"rw",还要求对文件内容的每个更新都同步写入到底层存储设备2.重要方法
RandomAccessFile对象包含一个记录指针,用来标识当前读写所处的位置。当RandomAccessFile对象被创建,指针位于文件头0处。当读写N个字节后,指针也会相应后移N个字节位置。并且RandomAccessFile还可以自由移动指针位置。
long getFilePointer();//返回文件记录指针的当前位置void seek(long pos);//将文件指针定位到pos位置
RandomAccessFile的使用
通过RandomAccessFile实现文件的多线程下载,即在多线程环境下,将文件“切分”为几块,每块用不同的线程去下载。
public class Hello { public static void main(String []args) throws Exception{ //预分配磁盘空间,磁盘创建一个指定大小的文件 RandomAccessFile raf = new RandomAccessFile("c://abc.txt", "rw"); raf.setLength(1024*1024);//分配1M的空间 raf.close(); //要写入文件的内容 String s1 = "第1个内容"; String s2 = "第2个内容"; String s3 = "第3个内容"; String s4 = "第4个内容"; String s5 = "第5个内容"; //多线程同时写入一个文件 new FileWriteThread(1024*1,s1.getBytes()).start(); new FileWriteThread(1024*2,s2.getBytes()).start(); new FileWriteThread(1024*3,s3.getBytes()).start(); new FileWriteThread(1024*4,s4.getBytes()).start(); new FileWriteThread(1024*5,s5.getBytes()).start(); } static class FileWriteThread extends Thread{ private int skip; private byte[] content; public FileWriteThread(int skip,byte[] content){ this.skip = skip; this.content = content; } @Override public void run() { RandomAccessFile raf = null; try { raf = new RandomAccessFile("c://abc.txt", "rw"); raf.seek(skip); raf.write(content); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (Exception e){ e.printStackTrace(); }finally { try { raf.close(); } catch (IOException e) { e.printStackTrace(); } } } }}
RandomAccessFile向指定文件插入内容,会覆盖原来的数据。可以先把原来的内容读取出来,在后面追加要插入的数据,在写入文件。
使用场景
网络请求中的多线程下载和断点续传。
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2025年04月11日 07时52分33秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
C语言的数值溢出问题(上)
2021-05-08
8051单片机(STC89C52)以定时器中断模式实现两倒计时器异步计时
2021-05-08
vue项目通过vue.config.js配置文件进行proxy反向代理跨域
2021-05-08
android:使用audiotrack 类播放wav文件
2021-05-08
聊聊我的五一小假期
2021-05-08
数据库三个级别封锁协议
2021-05-08
ACM/NCPC2016 C Card Hand Sorting(upc 3028)
2021-05-08
ubuntu学习笔记-常用文件、命令以及作用(hosts、vim、ssh)
2021-05-08
SLAM学习笔记-求解视觉SLAM问题
2021-05-08
普歌-允异团队-HashMap面试题
2021-05-08
还在一个一个手动安装虚拟机吗?Cobbler自动部署装机一键最小化安装打把游戏就好了
2021-05-08
程序员应该知道的97件事
2021-05-08
create-react-app路由的实现原理
2021-05-08
Linux环境变量配置错误导致命令不能使用(杂谈)
2021-05-08
openstack安装(九)网络服务的安装--控制节点
2021-05-08
shell编程(六)语言编码规范之(变量)
2021-05-08
vimscript学习笔记(二)预备知识
2021-05-08
Android数据库
2021-05-08
HTML基础,块级元素/行内元素/行内块元素辨析【2分钟掌握】
2021-05-08