zoukankan      html  css  js  c++  java
  • 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] 运行效果

      运行前:

          

      运行后:

          

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

  • 相关阅读:
    变量和值的延伸思考
    一念之想--多维数组
    java扫描控制台输入
    java字符转义
    javaee开发工具及环境配置过程
    java数组、泛型、集合在多态中的使用及对比
    flex的Accordion组件头部文本居中显示
    Visual Studio解决方案及项目的配置
    Away3D引擎学习入门笔记
    使用photoshop,把图片背景变成透明
  • 原文地址:https://www.cnblogs.com/EarthPioneer/p/9370992.html
Copyright © 2011-2022 走看看