RandomAccessFile的用法【转】
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了RandomAccessFile的用法【转】,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5165字,纯文字阅读大概需要8分钟。
内容图文
![RandomAccessFile的用法【转】](/upload/InfoBanner/zyjiaocheng/471/ae6d6a32376345139bcf1401f5cc1163.jpg)
测试代码
- public static void main(String[] args) {
- String path="D:\\3\\test.txt";
- int seekPointer=20;
- randomRed(path,seekPointer);//读取的方法
- //randomWrite(path);//追加写的方法
- //insert(path, 33, "\nlucene是一个优秀的全文检索库");
- }
运行效果:
- RandomAccessFile文件指针的初始位置:0
- is a teacher
- hadoop is perfect
功能two,追加数据,代码如下
- /**
- * 追加方式
- * 写的方法
- * @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());
- }catch(Exception e){
- e.printStackTrace();
- }
- }
测试代码
- public static void main(String[] args) {
- String path="D:\\3\\test.txt";
- //int seekPointer=20;
- // randomRed(path,seekPointer);//读取的方法
- randomWrite(path);//追加写的方法
- //insert(path, 33, "\nlucene是一个优秀的全文检索库");
- }
运行效果:
功能three,任意位置插入数据,代码如下
- /**
- * 实现向指定位置
- * 插入数据
- * @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();
- }
- }
测试代码
- public static void main(String[] args) {
- String path="D:\\3\\test.txt";
- //int seekPointer=20;
- // randomRed(path,seekPointer);//读取的方法
- // randomWrite(path);//追加写的方法
- insert(path, 33, "\nlucene是一个优秀的全文检索库");
- }
运行效果:
至此,RandomAccessFile类的几个功能,散仙在代码中已给出实现了,现在回到本文开始前的提的那个需求,用RandomAccessFile类就可以轻而易举的完成了,另外需要注意的是,向指定位置插入数据,是散仙自己改造的功能,RandomAccessFile并不直接支持,需要新建一个缓冲区临时空间,存数据,然后在写,因为一旦数据量上了级别,在任意位置插入数据,是很耗内存的,这个也就是为什么hadoop的HDFS文件系统,只支持append的方式,而没有提供修改的操作。
另外我们可以用RandomAccessFile这个类,来实现一个多线程断点下载的功能,用过下载工具的朋友们都知道,下载前都会建立两个临时文件,一个是与被下载文件大小相同的空文件,另一个是记录文件指针的位置文件,每次暂停的时候,都会保存上一次的指针,然后断点下载的时候,会继续从上一次的地方下载,从而实现断点下载或上传的功能,有兴趣的朋友们可以自己实现下。
RandomAccessFile的用法【转】
标签:
本文系统来源:http://www.cnblogs.com/nightsu/p/5938950.html
内容总结
以上是互联网集市为您收集整理的RandomAccessFile的用法【转】全部内容,希望文章能够帮你解决RandomAccessFile的用法【转】所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。