Java IO流->处理流->“随机访问” 的方式:RandomAccessFile
2015-08-30 13:55
691 查看
图一:
图二:
示例代码:
图二:
示例代码:
import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.RandomAccessFile; import org.junit.Test; public class TestRandomAccessFile { //进行文件的读写 @Test public void test1() { RandomAccessFile raf1 = null; RandomAccessFile raf2 = null; try { raf1 = new RandomAccessFile(new File("hello.txt"), "r"); raf2 = new RandomAccessFile("hello1.txt", "rw"); byte[] b = new byte[20]; int len; while((len = raf1.read(b)) != -1) { raf2.write(b, 0, len); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if(raf2 != null) { try { raf2.close(); } catch (IOException e) { e.printStackTrace(); } } if(raf1 != null) { try { raf1.close(); } catch (IOException e) { e.printStackTrace(); } } } } //实际上实现的是覆盖操作 @Test public void test2() { RandomAccessFile raf = null; try { raf = new RandomAccessFile("hello.txt", "rw"); //先定位到要插入的地方 raf.seek(4); raf.write("xy".getBytes()); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if(raf != null) { try { raf.close(); } catch (IOException e) { e.printStackTrace(); } } } } //插入操作:通过进行复制操作,再进行覆盖操作,test4()更好的实现了插入操作 @Test public void test3() { RandomAccessFile raf = null; try { raf = new RandomAccessFile("hello.txt", "rw"); raf.seek(4); String str = raf.readLine(); raf.seek(4); raf.write("xy".getBytes()); raf.write(str.getBytes()); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if(raf != null) { try { raf.close(); } catch (IOException e) { e.printStackTrace(); } } } } //插入操作:相较于test3(),更通用 @Test public void test4() { RandomAccessFile raf = null; try { raf = new RandomAccessFile("hello.txt", "rw"); raf.seek(4); byte[] b = new byte[20]; int len; StringBuffer sb = new StringBuffer(); while((len = raf.read(b)) != -1) { sb.append(new String(b, 0, len)); } raf.seek(4); raf.write("xy".getBytes()); raf.write(sb.toString().getBytes()); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if(raf != null) { try { raf.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
相关文章推荐
- Java单例你所不知道的事,与Volatile关键字有染
- Eclipse注释模板
- Eclipse启动时报错Java was started but returned exit code=13
- javaBean的学习(8.27)
- ubuntu14.04 安装eclipse
- java中怎么用Scanner
- [转]Spring 中的p标签
- JAVA基础学习(二)--标识符、关键字、数据类型与运算符
- javaWEB开发遇到的400(一)
- 用Java编写的简易计算器
- Java学习笔记之——多线程(二)
- 传智播客 刘意_2015年Java基础视频-深入浅出精华版 笔记(day01~day10)(2015年11月17日20:51:59)
- Java 8十个lambda表达式案例
- Java Lambda表达式入门
- 深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)
- 从根本上改变我们开发Java程序的方式:Lambda
- Java 8:Lambda表达式试水
- Java 8为什么需要Lambda表达式
- Java日志方案概述
- 单点登录cas与权限管理框架shiro集成-spring项目方式