7-RandomAccessFile 随机流
1 package com.io; 2 3 import java.io.File; 4 import java.io.FileNotFoundException; 5 import java.io.IOException; 6 import java.io.RandomAccessFile; 7 8 import org.junit.Test; 9 10 /* 11 * RandomAccessFile:支持随机访问 12 * 1、即可充当一个输入流,又可充当一个输出流 13 * 2、支持从任意位置读写 14 */ 15 public class RandomAccessFileTest { 16 17 18 19 @Test 20 public void testRandomAccessFile(){ 21 /* 22 * 创建RandomAccessFile对象有两个参数, 23 * 一个是file对象,一个是此RandomAccessFile对象对文件读写的权限,有以下四种 24 * 25 * r: 以只读方式打开 26 * rw:打开以便读取和写入 27 * rwd:打开以便读取和写入;同步文件内容的更新 28 * rws:打开以便读取和写入;同步文件内容和元数据的更新 29 30 */ 31 RandomAccessFile raf_read = null; 32 RandomAccessFile raf_write = null; 33 try { 34 raf_read = new RandomAccessFile(new File("random.txt"), "r"); 35 raf_write = new RandomAccessFile(new File("random_new.txt"), "rw"); 36 37 byte[] b = new byte[20]; 38 int len; 39 while((len = raf_read.read(b)) != -1){ 40 raf_write.write(b, 0, len); 41 }; 42 } catch (FileNotFoundException e) { 43 // TODO Auto-generated catch block 44 e.printStackTrace(); 45 } catch (IOException e) { 46 // TODO Auto-generated catch block 47 e.printStackTrace(); 48 }finally{ 49 try { 50 raf_write.close(); 51 } catch (IOException e) { 52 e.printStackTrace(); 53 } 54 55 try { 56 raf_read.close(); 57 } catch (IOException e) { 58 e.printStackTrace(); 59 } 60 } 61 } 62 63 64 @Test 65 public void 覆盖(){ 66 RandomAccessFile raf = null; 67 try { 68 raf = new RandomAccessFile(new File("random.txt"), "rw"); 69 raf.seek(3);//把指针移到第3个字节 70 raf.write("xy".getBytes()); 71 } catch (IOException e) { 72 e.printStackTrace(); 73 }finally{ 74 try { 75 raf.close(); 76 } catch (IOException e) { 77 // TODO Auto-generated catch block 78 e.printStackTrace(); 79 } 80 } 81 } 82 83 //单行插入字符 84 @Test 85 public void 插入字符串(){ 86 RandomAccessFile raf = null; 87 try { 88 raf = new RandomAccessFile(new File("random.txt"), "rw"); 89 raf.seek(3);//把指针移到第3个字节 90 String str = raf.readLine(); 91 System.out.println(raf.getFilePointer());//指针位置 92 raf.seek(3); 93 raf.write("xy".getBytes()); 94 raf.write(str.getBytes()); 95 } catch (IOException e) { 96 e.printStackTrace(); 97 }finally{ 98 try { 99 raf.close(); 100 } catch (IOException e) { 101 // TODO Auto-generated catch block 102 e.printStackTrace(); 103 } 104 } 105 } 106 107 108 109 //多行插入字符 110 @Test 111 public void 多行插入字符串(){ 112 RandomAccessFile raf = null; 113 try { 114 raf = new RandomAccessFile(new File("random_lines.txt"), "rw"); 115 raf.seek(3);//把指针移到第3个字节 116 byte [] b = new byte[20]; 117 int len; 118 StringBuffer sbr = new StringBuffer(); 119 while((len = raf.read(b)) != -1){ 120 sbr.append(new String(b,0,len)); 121 } 122 System.out.println(raf.getFilePointer()); 123 raf.seek(3); 124 raf.write("xy".getBytes()); 125 } catch (IOException e) { 126 e.printStackTrace(); 127 }finally{ 128 try { 129 raf.close(); 130 } catch (IOException e) { 131 e.printStackTrace(); 132 } 133 } 134 } 135 }