Java IO的RandomAccessFile的使用
来源:互联网 发布:永宏伺服编程 编辑:程序博客网 时间:2024/04/29 23:52
参考:
Java IO的RandomAccessFile的使用
RandomAccessFile是Java中输入,输出流体系中功能最丰富的文件内容访问类,它提供很多方法来操作文件,包括读写支持,与普通的IO流相比,它最大的特别之处就是支持任意访问的方式,程序可以直接跳到任意地方来读写数据。
RandomAccessFile类中比较重要的2个方法如下,其他的方法和普通IO方法类似。RandomAccessFile包含InputStream的三个read方法,也包含OutputStream的三个write方法。同时RandomAccessFile还包含一系列的readXxx和writeXxx方法完成输入输出。
getFilePointer() //返回文件记录指针的当前位置seek(long pos) //将文件记录指针定位到pos的位置
构造方法:
/** * model各个参数详解 * r 代表以只读方式打开指定文件 * rw 以读写方式打开指定文件 * rws 读写方式打开,并对内容或元数据都同步写入底层存储设备 * rwd 读写方式打开,对文件内容的更新同步更新至底层存储设备 * **/ public RandomAccessFile(String name, String mode)
使用示例:
1、在电脑桌面新建test.txt,并输入以下数据:
2、java代码:
import java.io.*;/** * Created by Administrator on 2017/5/12. */public class RandomAccessTest { public static void main(String[] args) { String path = "C:\\Users\\Administrator\\Desktop\\test.txt"; //任意位置读取 int seekPointer = 20; randomRead(path, seekPointer);//读取的方法 //追加写 randomWrite(path);//追加写的方法 //插入数据 insert(path, 33, "\nlucene是一个优秀的全文检索库"); } /** * 读的方法 * * @param path 文件路径 * @param seekPointer 指针位置 **/ public static void randomRead(String path, int seekPointer) { try { /** * model各个参数详解 * r 代表以只读方式打开指定文件 * rw 以读写方式打开指定文件 * rws 读写方式打开,并对内容或元数据都同步写入底层存储设备 * rwd 读写方式打开,对文件内容的更新同步更新至底层存储设备 * * **/ RandomAccessFile raf = new RandomAccessFile(path, "r"); //获取RandomAccessFile对象文件指针的位置,初始位置是0 System.out.println("RandomAccessFile文件指针的初始位置:" + raf.getFilePointer()); raf.seek(seekPointer);//移动文件指针位置 byte[] buff = new byte[1024]; //用于保存实际读取的字节数 int hasRead = 0; //循环读取 while ((hasRead = raf.read(buff)) > 0) { //打印读取的内容,并将字节转为字符串输入 System.out.println(new String(buff, 0, hasRead)); } } catch (Exception e) { e.printStackTrace(); } } /** * 追加方式 * 写的方法 * * @param path 文件路径 ***/ public static void randomWrite(String path) { try { /**以读写的方式建立一个RandomAccessFile对象**/ RandomAccessFile raf = new RandomAccessFile(path, "rw"); //将记录指针移动到文件最后 raf.seek(raf.length()); raf.write("我是追加的 \r\n".getBytes()); raf.close(); } catch (Exception e) { e.printStackTrace(); } } /** * 实现向指定位置 * 插入数据 * * @param fileName 文件名 * @param points 指针位置 * @param insertContent 插入内容 **/ public static void insert(String fileName, long points, String insertContent) { try { File tmp = File.createTempFile("tmp", null); tmp.deleteOnExit();//在JVM退出时删除 RandomAccessFile raf = new RandomAccessFile(fileName, "rw"); //创建一个临时文件夹来保存插入点后的数据 FileOutputStream tmpOut = new FileOutputStream(tmp); FileInputStream tmpIn = new FileInputStream(tmp); raf.seek(points); /**将插入点后的内容读入临时文件夹**/ byte[] buff = new byte[1024]; //用于保存临时读取的字节数 int hasRead = 0; //循环读取插入点后的内容 while ((hasRead = raf.read(buff)) > 0) { // 将读取的数据写入临时文件中 tmpOut.write(buff, 0, hasRead); } //插入需要指定添加的数据 raf.seek(points);//返回原来的插入处 //追加需要追加的内容 raf.write(insertContent.getBytes()); //最后追加临时文件中的内容 while ((hasRead = tmpIn.read(buff)) > 0) { raf.write(buff, 0, hasRead); } } catch (Exception e) { e.printStackTrace(); } }}
运行效果:
控制台:
RandomAccessFile文件指针的初始位置:0he is a techterhadoop is perfect
test.txt:
i am is a person he is a techtlucene是一个优秀的全文检索库erhadoop is perfect我是追加的
0 0
- Java IO的RandomAccessFile的使用
- Java IO的RandomAccessFile的使用
- Java IO的RandomAccessFile的使用
- Java IO的RandomAccessFile的使用
- Java IO的RandomAccessFile的使用(1)
- Java IO的RandomAccessFile的使用
- Java IO的RandomAccessFile的使用
- Java IO的RandomAccessFile的使用
- Java IO的RandomAccessFile的使用
- Java IO的RandomAccessFile的使用
- 【Java IO流】RandomAccessFile类的使用
- Java RandomAccessFile的使用
- Java RandomAccessFile的使用
- Java RandomAccessFile的使用
- Java RandomAccessFile的使用
- Java RandomAccessFile的使用
- Java RandomAccessFile的使用
- Java RandomAccessFile的使用
- 分布式架构学习之:025--Dubbo服务只订阅
- 关于 ajax php 交互的一些数据转换的
- GMT相关
- JVM运行时数据区域介绍
- Kali Linux 2017.1 Armltage无法使用解决方案
- Java IO的RandomAccessFile的使用
- Problem B: 图形计数与求面积
- Win32编程 创建窗口第一步 注册窗口类
- FreeRTOS事件组之事件组置位(xEventGroupSetBits)
- 分布式架构学习之:026--Dubbo服务只注册
- 【Java】多文件压缩下载(调用浏览器下载)
- 【小练习05】HTML+CSS--淘宝商铺小页面
- 论文阅读:3D exemplar-based random walks for tooth segmentation from cone-beam computed tomography images
- 设计模式之模板方法