运行结果:
this is a demo!
RandomAccessFile常用方法汇总:
void write(int d)
该方法会根据当前指针所在位置处写入一个字节,是将参数int的”低8位”写出
int read()
如果返回-1表示读取到了文件末尾EOF(EOF:End Of File)! 每次读取后自动移动文件指针, 准备下次读取。
void write(byte[] d)
根据当前指针所在位置处连续写出给定数组中的所有字节
void write(byte[] d,int offset,int len)
根据当前指针所在位置处连续写出给定数组中的部分字节,这个部分是从数组的offset处开始,连续len个字节
int read(byte[] b)
从文件中尝试最多读取给定数组的总长度的字节量,并从给定的字节数组第一个位置开始,将读取到的字节顺序存放至数组中,返回值为实际读取到的字节量
void close()
RandomAccessFile在对文件访问的操作全部结束后,要调用close()方法来释放与其关联的所有系统资源
<code> <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span>(String[] args) throws IOException {
<span class="hljs-comment">//以读写方式打开并写入一行文本</span>
File fis = <span class="hljs-keyword">new</span> File(<span class="hljs-string">"test.dat"</span>);
RandomAccessFile rafw = <span class="hljs-keyword">new</span> RandomAccessFile(fis, <span class="hljs-string">"rw"</span>);
<span class="hljs-keyword">byte</span>[] writeStr = <span class="hljs-string">"this is a demo!
"</span>.getBytes();
<span class="hljs-keyword">for</span>(<span class="hljs-keyword">int</span> i = <span class="hljs-number">0</span>; i < <span class="hljs-number">10</span>; i++) {
rafw.write(writeStr, <span class="hljs-number">0</span>, writeStr.length);
}
rafw.close();
<span class="hljs-comment">//以只读方式打开test.dat</span>
RandomAccessFile rafr = <span class="hljs-keyword">new</span> RandomAccessFile(fis, <span class="hljs-string">"r"</span>);
<span class="hljs-keyword">byte</span>[] rd = <span class="hljs-keyword">new</span> <span class="hljs-keyword">byte</span>[<span class="hljs-number">1024</span>];
<span class="hljs-keyword">int</span> len = -<span class="hljs-number">1</span>;
<span class="hljs-comment">//循环读取,读到结束后len被重新赋值为-1</span>
<span class="hljs-keyword">while</span>((len = rafr.read(rd))!= -<span class="hljs-number">1</span>) {
System.<span class="hljs-keyword">out</span>.println(<span class="hljs-keyword">new</span> String(rd));
}
System.<span class="hljs-keyword">out</span>.println(<span class="hljs-string">"读取结束,len="</span>+len);
rafr.close();
}</code>
运行结果:
this is a demo!
this is a demo!
this is a demo!
this is a demo!
this is a demo!
this is a demo!
this is a demo!
this is a demo!
this is a demo!
this is a demo!
读取结束,len=-1
文件指针操作:
RandomAccessFile的读写操作都是基于指针的,也就是说总是在指针当前所指向的位置进行读写操作。
long getFilePointer()
获取当前指针位置
void seek(long pos)
使用该方法可以移动指针到指定位置。
int skipBytes(int n)
尝试跳过输入的 n 个字节以丢弃跳过的字节
实现文件追加:
<code> <span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span>(String[] args) <span class="hljs-keyword">throws</span> IOException {
RandomAccessFile raf = <span class="hljs-keyword">new</span> RandomAccessFile(<span class="hljs-string">"test.dat"</span>, <span class="hljs-string">"rw"</span>);
<span class="hljs-comment">//将记录指针移动到文件最后 ,进行追加操作 </span>
raf.seek(raf.length());
raf.write(<span class="hljs-string">"追加后的文本
"</span>.getBytes());
raf.close();
}</code>
运行后test.dat文本内容:
this is a demo!
this is a demo!
this is a demo!
this is a demo!
this is a demo!
this is a demo!
this is a demo!
this is a demo!
this is a demo!
this is a demo!
追加后的文本
总结:
RandomAccessFile,优点是可以控制指针的位置,对文件进行指定位置的读写操作。
但是同时也有一些缺点,执行效率比较慢,大量进行指针控制操作很耗内存。
版权声明:本文为博主原创文章,未经博主允许不得转载。
Java RandomAccessFile文件操作详解
标签:java accessfile io操作 文件操作
本文系统来源:http://blog.csdn.net/shf4715/article/details/47163983
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!