当前位置:首页 > 操作系统 > MacOs

RandomAccessFile

),它的唯一父类是 Object
RandomAccessFile 类支持“随机访问”的方式,程序可以直接跳到文件的任意地方来读、写文件(其实我更愿意叫它“随意访问”)----支持只访问文件的部分内容----可以向已存在的文件后追加内容
RandomAccessFile 对象包含一个记录指针,用以标示当前读写处的位置。RandomAccessFile 类对象可以自由移动记录指针:long getFilePointer():获取文件记录指针的当前位置void seek(long pos):将文件记录指针定位到 pos位置
创建 RandomAccessFile 类实例需要指定一个 mode参数,该参数指定 RandomAccessFile 的访问模式:r:以只读方式打开rw:打开以便读取和写入rwd:打开以便读取和写入,同步文件内容的更新rws:打开以便读取和写入,同步文件内容和元数据的更新
JDK 1.4后很多 RandomAccessFile 的功能被转到“内存映射文件”里了,可以考虑使用 memory-mapped files 
下面举例说明(注意:直接在指针后 write 将会是覆盖操作,这里只演示插入操作)
<ol class="linenums"><li class="L0"><code><span class="com">    // 文本文件的复制(实现读写)</span></code></li><li class="L1"><code><span class="pln">	</span><span class="lit">@Test</span></code></li><li class="L2"><code><span class="pln">	</span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">void</span><span class="pln"> test1</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span></code></li><li class="L3"><code><span class="pln">		</span><span class="typ">RandomAccessFile</span><span class="pln"> rafin </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">null</span><span class="pun">;</span></code></li><li class="L4"><code><span class="pln">		</span><span class="typ">RandomAccessFile</span><span class="pln"> rafout </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">null</span><span class="pun">;</span></code></li><li class="L5"><code><span class="pln">		</span><span class="kwd">try</span><span class="pln"> </span><span class="pun">{</span></code></li><li class="L6"><code><span class="pln">			rafin </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">RandomAccessFile</span><span class="pun">(</span><span class="str">"C:/Users/59929/Desktop/test1.txt"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"r"</span><span class="pun">);</span></code></li><li class="L7"><code><span class="pln">			rafout </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">RandomAccessFile</span><span class="pun">(</span><span class="str">"C:/Users/59929/Documents/test.txt"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"rw"</span><span class="pun">);</span></code></li><li class="L8"><code><span class="pln">			</span><span class="kwd">int</span><span class="pln"> len</span><span class="pun">;</span></code></li><li class="L9"><code><span class="pln">			</span><span class="kwd">byte</span><span class="pun">[]</span><span class="pln"> b </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="kwd">byte</span><span class="pun">[</span><span class="lit">1024</span><span class="pun">];</span></code></li><li class="L0"><code><span class="pln">			</span><span class="kwd">while</span><span class="pln"> </span><span class="pun">((</span><span class="pln">len </span><span class="pun">=</span><span class="pln"> rafin</span><span class="pun">.</span><span class="pln">read</span><span class="pun">(</span><span class="pln">b</span><span class="pun">))</span><span class="pln"> </span><span class="pun">!=</span><span class="pln"> </span><span class="pun">-</span><span class="lit">1</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span></code></li><li class="L1"><code><span class="pln">				rafout</span><span class="pun">.</span><span class="pln">write</span><span class="pun">(</span><span class="pln">b</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> len</span><span class="pun">);</span></code></li><li class="L2"><code><span class="pln">			</span><span class="pun">}</span></code></li><li class="L3"><code><span class="pln">		</span><span class="pun">}</span><span class="pln"> </span><span class="kwd">catch</span><span class="pln"> </span><span class="pun">(</span><span class="typ">FileNotFoundException</span><span class="pln"> e</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span></code></li><li class="L4"><code><span class="pln">			e</span><span class="pun">.</span><span class="pln">printStackTrace</span><span class="pun">();</span></code></li><li class="L5"><code><span class="pln">		</span><span class="pun">}</span><span class="pln"> </span><span class="kwd">catch</span><span class="pln"> </span><span class="pun">(</span><span class="typ">IOException</span><span class="pln"> e</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span></code></li><li class="L6"><code><span class="pln">			e</span><span class="pun">.</span><span class="pln">printStackTrace</span><span class="pun">();</span></code></li><li class="L7"><code><span class="pln">		</span><span class="pun">}</span><span class="pln"> </span><span class="kwd">finally</span><span class="pln"> </span><span class="pun">{</span></code></li><li class="L8"><code><span class="pln">			</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">rafout </span><span class="pun">!=</span><span class="pln"> </span><span class="kwd">null</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span></code></li><li class="L9"><code><span class="pln">				</span><span class="kwd">try</span><span class="pln"> </span><span class="pun">{</span></code></li><li class="L0"><code><span class="pln">					rafout</span><span class="pun">.</span><span class="pln">close</span><span class="pun">();</span></code></li><li class="L1"><code><span class="pln">				</span><span class="pun">}</span><span class="pln"> </span><span class="kwd">catch</span><span class="pln"> </span><span class="pun">(</span><span class="typ">IOException</span><span class="pln"> e</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span></code></li><li class="L2"><code><span class="pln">					e</span><span class="pun">.</span><span class="pln">printStackTrace</span><span class="pun">();</span></code></li><li class="L3"><code><span class="pln">				</span><span class="pun">}</span></code></li><li class="L4"><code><span class="pln">			</span><span class="pun">}</span></code></li><li class="L5"><code><span class="pln">			</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">rafin </span><span class="pun">!=</span><span class="pln"> </span><span class="kwd">null</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span></code></li><li class="L6"><code><span class="pln">				</span><span class="kwd">try</span><span class="pln"> </span><span class="pun">{</span></code></li><li class="L7"><code><span class="pln">					rafin</span><span class="pun">.</span><span class="pln">close</span><span class="pun">();</span></code></li><li class="L8"><code><span class="pln">				</span><span class="pun">}</span><span class="pln"> </span><span class="kwd">catch</span><span class="pln"> </span><span class="pun">(</span><span class="typ">IOException</span><span class="pln"> e</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span></code></li><li class="L9"><code><span class="pln">					e</span><span class="pun">.</span><span class="pln">printStackTrace</span><span class="pun">();</span></code></li><li class="L0"><code><span class="pln">				</span><span class="pun">}</span></code></li><li class="L1"><code><span class="pln">			</span><span class="pun">}</span></code></li><li class="L2"><code><span class="pln">		</span><span class="pun">}</span></code></li><li class="L3"><code><span class="pln">	</span><span class="pun">}</span></code></li><li class="L4"><code></code></li><li class="L5"><code><span class="pln">	</span><span class="com">// 实现文本文件的插入操作</span></code></li><li class="L6"><code><span class="pln">	</span><span class="lit">@Test</span></code></li><li class="L7"><code><span class="pln">	</span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">void</span><span class="pln"> test2</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span></code></li><li class="L8"><code><span class="pln">		</span><span class="typ">RandomAccessFile</span><span class="pln"> raf </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">null</span><span class="pun">;</span></code></li><li class="L9"><code><span class="pln">		</span><span class="kwd">try</span><span class="pln"> </span><span class="pun">{</span></code></li><li class="L0"><code><span class="pln">			raf </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">RandomAccessFile</span><span class="pun">(</span><span class="str">"C:/Users/59929/Desktop/test2.txt"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"rw"</span><span class="pun">);</span></code></li><li class="L1"><code><span class="pln">			</span><span class="typ">System</span><span class="pun">.</span><span class="pln">out</span><span class="pun">.</span><span class="pln">println</span><span class="pun">(</span><span class="str">"现在指针位置为:"</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> raf</span><span class="pun">.</span><span class="pln">getFilePointer</span><span class="pun">());</span></code></li><li class="L2"><code><span class="pln">			raf</span><span class="pun">.</span><span class="pln">seek</span><span class="pun">(</span><span class="lit">16</span><span class="pun">);</span></code></li><li class="L3"><code><span class="pln">			</span><span class="typ">System</span><span class="pun">.</span><span class="pln">out</span><span class="pun">.</span><span class="pln">println</span><span class="pun">(</span><span class="str">"移到要修改的位置,现在指针位置为:"</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> raf</span><span class="pun">.</span><span class="pln">getFilePointer</span><span class="pun">());</span></code></li><li class="L4"><code><span class="pln">			</span><span class="kwd">int</span><span class="pln"> len</span><span class="pun">;</span></code></li><li class="L5"><code><span class="pln">			</span><span class="kwd">byte</span><span class="pun">[]</span><span class="pln"> b </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="kwd">byte</span><span class="pun">[</span><span class="lit">10</span><span class="pun">];</span></code></li><li class="L6"><code><span class="pln">			</span><span class="typ">StringBuffer</span><span class="pln"> sb </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">StringBuffer</span><span class="pun">();</span></code></li><li class="L7"><code><span class="pln">			</span><span class="kwd">while</span><span class="pln"> </span><span class="pun">((</span><span class="pln">len </span><span class="pun">=</span><span class="pln"> raf</span><span class="pun">.</span><span class="pln">read</span><span class="pun">(</span><span class="pln">b</span><span class="pun">))</span><span class="pln"> </span><span class="pun">!=</span><span class="pln"> </span><span class="pun">-</span><span class="lit">1</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span></code></li><li class="L8"><code><span class="pln">				sb</span><span class="pun">.</span><span class="pln">append</span><span class="pun">(</span><span class="kwd">new</span><span class="pln"> </span><span class="typ">String</span><span class="pun">(</span><span class="pln">b</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0</span><span class="pun">,</span><span class="pln"> len</span><span class="pun">));</span></code></li><li class="L9"><code><span class="pln">			</span><span class="pun">}</span></code></li><li class="L0"><code><span class="pln">			</span><span class="typ">System</span><span class="pun">.</span><span class="pln">out</span><span class="pun">.</span><span class="pln">println</span><span class="pun">(</span><span class="str">"读完后现在指针位置为:"</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> raf</span><span class="pun">.</span><span class="pln">getFilePointer</span><span class="pun">());</span></code></li><li class="L1"><code><span class="pln">			raf</span><span class="pun">.</span><span class="pln">seek</span><span class="pun">(</span><span class="lit">16</span><span class="pun">);</span></code></li><li class="L2"><code><span class="pln">			</span><span class="typ">System</span><span class="pun">.</span><span class="pln">out</span><span class="pun">.</span><span class="pln">println</span><span class="pun">(</span><span class="str">"再次移到要修改的位置,现在指针位置为:"</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> raf</span><span class="pun">.</span><span class="pln">getFilePointer</span><span class="pun">());</span></code></li><li class="L3"><code><span class="pln">			raf</span><span class="pun">.</span><span class="pln">write</span><span class="pun">(</span><span class="str">"c"</span><span class="pun">.</span><span class="pln">getBytes</span><span class="pun">());</span></code></li><li class="L4"><code><span class="pln">			raf</span><span class="pun">.</span><span class="pln">write</span><span class="pun">(</span><span class="pln">sb</span><span class="pun">.</span><span class="pln">toString</span><span class="pun">().</span><span class="pln">getBytes</span><span class="pun">());</span></code></li><li class="L5"><code><span class="pln">		</span><span class="pun">}</span><span class="pln"> </span><span class="kwd">catch</span><span class="pln"> </span><span class="pun">(</span><span class="typ">FileNotFoundException</span><span class="pln"> e</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span></code></li><li class="L6"><code><span class="pln">			e</span><span class="pun">.</span><span class="pln">printStackTrace</span><span class="pun">();</span></code></li><li class="L7"><code><span class="pln">		</span><span class="pun">}</span><span class="pln"> </span><span class="kwd">catch</span><span class="pln"> </span><span class="pun">(</span><span class="typ">IOException</span><span class="pln"> e</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span></code></li><li class="L8"><code><span class="pln">			e</span><span class="pun">.</span><span class="pln">printStackTrace</span><span class="pun">();</span></code></li><li class="L9"><code><span class="pln">		</span><span class="pun">}</span><span class="pln"> </span><span class="kwd">finally</span><span class="pln"> </span><span class="pun">{</span></code></li><li class="L0"><code><span class="pln">			</span><span class="kwd">if</span><span class="pln"> </span><span class="pun">(</span><span class="pln">raf </span><span class="pun">!=</span><span class="pln"> </span><span class="kwd">null</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span></code></li><li class="L1"><code><span class="pln">				</span><span class="kwd">try</span><span class="pln"> </span><span class="pun">{</span></code></li><li class="L2"><code><span class="pln">					raf</span><span class="pun">.</span><span class="pln">close</span><span class="pun">();</span></code></li><li class="L3"><code><span class="pln">				</span><span class="pun">}</span><span class="pln"> </span><span class="kwd">catch</span><span class="pln"> </span><span class="pun">(</span><span class="typ">IOException</span><span class="pln"> e</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span></code></li><li class="L4"><code><span class="pln">					e</span><span class="pun">.</span><span class="pln">printStackTrace</span><span class="pun">();</span></code></li><li class="L5"><code><span class="pln">				</span><span class="pun">}</span></code></li><li class="L6"><code><span class="pln">			</span><span class="pun">}</span></code></li><li class="L7"><code><span class="pln">		</span><span class="pun">}</span></code></li><li class="L8"><code><span class="pln">	</span><span class="pun">}</span></code></li></ol>

RandomAccessFile

标签:[]   覆盖   地方   sys   同步   ack   top   映射文件   演示   

本文系统来源:http://www.cnblogs.com/chendifan/p/6537811.html


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!

相关教程推荐

其他课程推荐