Java分享笔记:RandomAccessFile流 & 在文件指定位置插入内容

  RandomAccessFile流:随机存取文件流,该类定义了一个记录指针,通过移动指针可以访问文件的任意位置,且对文件既可以读也可以写。使用该类的write方法对文件写入时,实际上是一种覆盖效果,即写入的内容会覆盖相应位置处的原有内容。

  为了实现插入内容的效果,需要我们自行设计程序来实现。下面是笔者的程序设计。

[1] 程序设计

 1 /*---------------------
 2 程序实现的功能:
 3 ....//使用RandomAccessFile流设计一个类,实现在指定文件的指定位置插入指定的内容
 4 ---------------------*/
 5 package pack01;
 6 
 7 import java.io.*;
 8 
 9 public class InsertContent {
10     
11     private String filePath; //要操作的文件的路径
12     private String content;    //要插入的内容
13     private long position; //要插入的位置
14     
15     //构造方法
16     public InsertContent(String path, String con, long pos) {
17         filePath = path;
18         content = con;
19         position = pos;
20     }
21     
22     //设置要操作的文件的路径
23     public void setFilePath(String path) {
24         filePath = path;
25     }
26     
27     //设置要插入文件的内容
28     public void setContent(String con) {
29         content = con;
30     }
31     
32     //设置要插入的位置
33     public void setPosition(long pos) {
34         position = pos;
35     }
36     
37     //插入内容的具体实现方法
38     public void insertCon(){
39         
40         RandomAccessFile raf = null;
41         
42         try {
43             
44             raf = new RandomAccessFile(filePath, "rw"); //将随机存取文件流连接到文件,访问方式设置为可读可写
45             raf.seek(position); //指定插入的位置
46             
47             //***************先将插入点后面的内容保存起来****************
48             StringBuffer sb = new StringBuffer();
49             byte[] b = new byte[100];
50             int len;
51             while( (len=raf.read(b)) != -1 ) {
52                 sb.append( new String(b, 0, len) );
53             }
54             //.................................................
55             
56             raf.seek(position); //重新设置插入位置
57             raf.write( content.getBytes() ); //插入指定内容
58             raf.write( sb.toString().getBytes() ); //恢复插入点后面的内容
59             
60         } catch (IOException e) {
61             
62             e.printStackTrace();
63             
64         } finally {
65             
66             //关闭随机存取文件流
67             try {
68                 raf.close();
69             } catch (IOException e) {
70                 e.printStackTrace();
71             }
72         }
73     }
74     
75     //测试方法
76     public static void main(String[] args) {
77         
78         InsertContent ic = new InsertContent("d:/JavaTest/file1.txt", "Java", 5);
79         ic.insertCon();
80     }
81 }

[2] 运行效果

  运行前:

      

  运行后:

      

注:希望与各位读者相互交流,共同学习进步。

猜你喜欢

转载自www.cnblogs.com/EarthPioneer/p/9370992.html