Java IO系统——RandomAccessFile类
2016-04-26 22:15
483 查看
RandomAccessFile是Java输入/输出体系中功能最丰富的文件内容访问类,它提供了众多的方法来访问文件内容,它既可以读取文件内容,也可以向文件输出数据。与普通输入/输出流不同的是,RandomAccessFile支持"随机访问"的方式,程序可以调到程序的任意地方来读写数据。RandomAccessFile也有一个局限,就是它只能读写文件,不能读写其他IO节点。
一、构造器
RandomAccessFile有两个构造器:
1.String/File:使用String参数来指定文件名或者使用File参数来指定文件本身。
2.mode:指定RandomAccessFile的访问模式,该参数有如下4个值:
①"r":以只读方式打开文件,如果试图执行写入方法,则会抛出IO异常;
②"rw":以读、写方式打开指定文件。如果该文件尚未存在,则尝试创建该文件;
③"rws":以读、写方式打开指定文件,相对于"rw"模式,还要求对文件的内容或元数据的每个更新都同步写入到底层储存设备。
④"rwd":以读、写方式打开指定文件,相对于"rw"模式,还要求对文件内容的每个更新都同步写入底层设备
二、使用
1.随意读
下面程序使用了RandomAccessFile来访问指定的中间部分数据:
上面的代码,创建了RandomAccessFile类,该对象以只读方式打开文件;然后将文件记录指针定位到300处,程序将从300字节出开始读、写,接下来的部分也InputStream并没有太大区别。
2.随意写
下面的程序师范了如何想指定文件追加内容,为了追加内容,程序因该先将记录指针移动到文件最后,然后开始向文件中输出内容。
以上演示了RandomAccessFile的基本功能操作,需要注意的是,RandomAccessFile依然不能向文件的指定位置插入内容,如果直接讲文件记录指针移动到中间位置进行输出操作,会将指针之后的内容覆盖掉。如果需要想指定位置插入内容,程序需要把插入点之后的内容读入缓冲区,等把需要插入的文字插入文件之后,再将缓冲区的内容追加到文件之后。
一、构造器
RandomAccessFile有两个构造器:
1.String/File:使用String参数来指定文件名或者使用File参数来指定文件本身。
2.mode:指定RandomAccessFile的访问模式,该参数有如下4个值:
①"r":以只读方式打开文件,如果试图执行写入方法,则会抛出IO异常;
②"rw":以读、写方式打开指定文件。如果该文件尚未存在,则尝试创建该文件;
③"rws":以读、写方式打开指定文件,相对于"rw"模式,还要求对文件的内容或元数据的每个更新都同步写入到底层储存设备。
④"rwd":以读、写方式打开指定文件,相对于"rw"模式,还要求对文件内容的每个更新都同步写入底层设备
二、使用
1.随意读
下面程序使用了RandomAccessFile来访问指定的中间部分数据:
package IO; import java.io.*; public class RandomAccessFileTest2 { public static void main(String[] args) { RandomAccessFile raf = null; try { //以只读方式打开一个RandomAccessFile对象 raf = new RandomAccessFile("E:\\Computer\\04JAVA\\JavaCode2\\CrazyJava\\file\\file.txt" , "r"); //获取RandomAccessFile对象文件指针的位置,初始位置是0 System.out.println("RandomAccessFile的文件指针的初始位置:" + raf.getFilePointer()); //移动raf的文件记录指针的位置 raf.seek(50); byte[] bbuf = new byte[1024]; //用于保存实际读取的字节数 int hasRead = 0; //使用循环来重复“取水”过程 while ((hasRead = raf.read(bbuf)) > 0 ) { //取出“竹筒”中水滴(字节),将字节数组转换成字符串输出! System.out.print(new String(bbuf , 0 , hasRead )); } } catch (IOException ex) { ex.printStackTrace(); } finally { try { if (raf != null) { raf.close(); } } catch (IOException ex) { ex.printStackTrace(); } } } }
上面的代码,创建了RandomAccessFile类,该对象以只读方式打开文件;然后将文件记录指针定位到300处,程序将从300字节出开始读、写,接下来的部分也InputStream并没有太大区别。
2.随意写
下面的程序师范了如何想指定文件追加内容,为了追加内容,程序因该先将记录指针移动到文件最后,然后开始向文件中输出内容。
package IO; import java.io.*; public class AppendContent2 { public static void main(String[] args) { RandomAccessFile raf = null; try { //以读、写方式打开一个RandomAccessFile对象 raf = new RandomAccessFile("E:\\Computer\\04JAVA\\JavaCode2\\CrazyJava\\file\\file.txt" , "rw"); //将记录指针移动的out.txt文件的最后 raf.seek(raf.length()); raf.write("追加的内容!\r\n".getBytes()); } catch (IOException ex) { ex.printStackTrace(); } finally { try { if (raf != null) { raf.close(); } } catch (IOException ex) { ex.printStackTrace(); } } } }
以上演示了RandomAccessFile的基本功能操作,需要注意的是,RandomAccessFile依然不能向文件的指定位置插入内容,如果直接讲文件记录指针移动到中间位置进行输出操作,会将指针之后的内容覆盖掉。如果需要想指定位置插入内容,程序需要把插入点之后的内容读入缓冲区,等把需要插入的文字插入文件之后,再将缓冲区的内容追加到文件之后。
相关文章推荐
- java内部类详解
- [Java]集合框架知识点总结(逐步更新)
- struts2上传文件,显示进度条
- JAVAEE(二)用cookies记录每个用户的访问次数
- JSch:纯JAVA实现SFTP文件上传和下载
- jvm-java 内存模型 以及各个分区具体内容
- 类对象数组以及排序问题
- LSA校验和计算(java源码)
- java-map-EnumMap
- struts2开发11--提交后自动显示等待界面
- Java_ this
- java 接口和抽象类
- java读写file
- [035]Java实现SVM对乳腺癌检测数据分类分析
- activemq+spring 持久化发送消息
- 我对java的理解(二)——反射是小偷的万能钥匙
- java环境变量设置
- 文件过滤<FilenameFilter>
- JAVA——多线程之单例模式
- 【SSH】Java之静态代理和动态代理