• 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] 运行效果

      运行前:

          

      运行后:

          

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

  • 相关阅读:
    iOS打包Framework真机和模拟器兼容合并版本
    iOS同一项目多个Target的快速实现方法
    Android横屏下Fragment界面重叠问题
    项目实战工具类(一):PhoneUtil(手机信息相关)
    浅谈FloatingActionButton(悬浮按钮)
    LeanCloud数据存储相关问题
    Android项目实战(二十三):仿QQ设置App全局字体大小
    Android项目实战(二十二):启动另一个APP or 重启本APP
    Android项目实战(二十):浅谈ListView悬浮头部展现效果
    浅谈DrawerLayout(抽屉效果)
  • 原文地址:https://www.cnblogs.com/EarthPioneer/p/9370992.html
Copyright © 2020-2023  润新知