RandomAccessFile类-随机存取文件流
RandomAccessFile 声明在 java . io 包下,但直接继承与 java . lang . Object 类。并且它实现了 DataInput、DataOutput 这两个接口,也就意味着这个类既可以读也可以写。
RandomAccessFile 类支持 “随机访问” 的方式,程序可以直接跳到文件的任意地方来读、写文件
支持只访问文件的部分内容
可以向已存在的文件后追加内容
RandomAccessFile 对象包含一个记录指针,用以表示当前读写的位置
创建 RandomAccessFile 类实例需要指定一个 mode 参数,该参数指定 RandomAccessFile 的访问模式
r:以只读的方式打开
rw:打开以便读取和写入
rwd:打开以便读取和写入;同步文件内容的更新
rws:打开以便读取和写入;同步文件内容和元数据的更新
实现数据的存取
1 import java.io.File; 2 import java.io.IOException; 3 import java.io.RandomAccessFile; 4 5 public class RandomAccessFileTest { 6 public void RandomAccessFileTest() { 7 RandomAccessFile raf1 = null; 8 RandomAccessFile raf2 = null; 9 try { 10 raf1 = new RandomAccessFile(new File("saber.jpg"),"r"); 11 raf2 = new RandomAccessFile(new File("saber1.jpg"),"rw"); 12 byte[] buffer = new byte[1024]; 13 int len; 14 while ((len = raf1.read(buffer)) != -1){ 15 raf2.write(buffer,0,len); 16 } 17 } catch (IOException e) { 18 e.printStackTrace(); 19 } finally { 20 try { 21 raf1.close(); 22 } catch (IOException e) { 23 e.printStackTrace(); 24 } finally { 25 try { 26 raf2.close(); 27 } catch (IOException e) { 28 e.printStackTrace(); 29 } 30 } 31 } 32 } 33 }
实现在指定位置插入数据
1 //在文件内容索引位置为3处插入数据 2 import org.junit.Test; 3 import java.io.File; 4 import java.io.IOException; 5 import java.io.RandomAccessFile; 6 7 public class RandomAccessFileTest { 8 @Test 9 public void RandomAccessFileTest() { 10 RandomAccessFile raf1 = null; 11 try { 12 raf1 = new RandomAccessFile("hello.txt","rw"); 13 raf1.seek(3);//将指针调到角标为3的位置 14 //保存指针3后面的所有数据到StringBuilder中 15 StringBuilder builder = new StringBuilder((int) new File("hello.txt").length()); 16 byte[] buffer = new byte[20]; 17 int len; 18 while ((len = raf1.read(buffer)) != -1){ 19 builder.append(new String(buffer,0,len)); 20 } 21 //回调指针,写入“abc” 22 raf1.seek(3); 23 raf1.write("abc".getBytes()); 24 //将StringBuilder中的数据写入到文件中 25 raf1.write(builder.toString().getBytes()); 26 } catch (IOException e) { 27 e.printStackTrace(); 28 } finally { 29 try { 30 if (raf1 != null) 31 raf1.close(); 32 } catch (IOException e) { 33 e.printStackTrace(); 34 } 35 } 36 } 37 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET10 - 预览版1新功能体验(一)