zoukankan      html  css  js  c++  java
  • Java io实现读取文件特殊内容进行替换

    最近公司在做一个项目其中一个需求是读取文件中的特殊字符在其后进行添加或删除字符操作,本来想直接使用randomAccessFile按行读取,读取到特殊字符就进行添加或删除操作,但是randomAccessFile会覆盖后边的内容,虽然可以使用临时文件的方式解决,但是感觉很古怪,权衡之后用如下方式实现:

    public static void delAccessNumber(File source, File dest,String str){
         logger.info("进入IvrManageController.addAndDelAccessNumber()...方法");
         FileInputStream fis=null;
         InputStreamReader isr=null;
         BufferedReader bReader=null;
         OutputStreamWriter osw=null;
         FileOutputStream fos=null;
         BufferedWriter bWriter=null;
         try {
             String line;
             StringBuffer stringBuffer ;
             fis=new FileInputStream(source);//定义输入文件
             fos=new FileOutputStream(dest);//定义输出文件
             isr=new InputStreamReader(fis,"gb2312");//读取输入文件
             osw=new OutputStreamWriter(fos,"gb2312");//写入输入文件
             bReader=new BufferedReader(isr);//读取缓冲区
             bWriter=new BufferedWriter(osw);//写入缓存区
             while((line=bReader.readLine())!=null){ //按行读取数据
                 if(line.indexOf("OnLineBList &")>0 || line.indexOf("ReturnBList &")>0) {
                     int pos = line.indexOf(""|");
                     line=new StringBuffer(line).delete(pos+1,pos+2+str.length()).toString();
                     System.out.println(line);//输出拼接结果
                     bWriter.write(line);//将拼结果按行写入出入文件中
                     bWriter.newLine();
                 }else{
                     bWriter.write(line);
                     bWriter.newLine();
                 }
             }
         } catch (FileNotFoundException e) {
             logger.error("找不到文件",e);
         }catch (IOException e) {
             logger.error("读取文件失败",e);
         }finally{
             try {
                 bReader.close();//关闭读取缓冲区
                 isr.close();//关闭读取文件内容
                 fis.close();//关闭读取文件
                 bWriter.close();//关闭写入缓存区
                 osw.close();//关闭写入文件内容
                 fos.close();//关闭写入文件
             } catch (IOException e) {
                 logger.error("关闭文件流失败!",e);
             }
         }
     }
    

    注意:不能多次读写同一文件

    randomAccessFile使用临时文件方式

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.RandomAccessFile;
     
    public class InsertContent {
        public static void insert(String fileName, long pos, String insertContent) throws IOException{
            File file = File.createTempFile("tmp", null);
            file.deleteOnExit();
            RandomAccessFile raf = new RandomAccessFile(fileName, "rw");
            FileInputStream fileInputStream = new FileInputStream(file);
            FileOutputStream fileOutputStream = new FileOutputStream(file);
            raf.seek(pos);
            byte[] buff = new byte[64];
            int hasRead = 0;
            while((hasRead = raf.read(buff)) > 0){
                fileOutputStream.write(buff);
            }
            raf.seek(pos);
            raf.write(insertContent.getBytes());
            //追加文件插入点之后的内容
            while((hasRead = fileInputStream.read(buff)) > 0){
                raf.write(buff, 0, hasRead);
            }
            raf.close();
            fileInputStream.close();
            fileOutputStream.close();
        }
        public static void main(String[] args) throws IOException {
            insert("F:AttendanceActivity.java", 57, "插入的内容rn");
        }
    }
    
    

    原文链接:https://blog.csdn.net/Caide3/article/details/81947569

    为了目标奋斗
  • 相关阅读:
    web安全培训笔记
    《virtualbox完全学习手册》
    vim多标签,多窗口
    lnmp.org一键安装包
    git基本命令,Git的skil-map,git配置http/https/socks5代理,,,,,,,,,,,,,,,,,,,,,,
    大数据
    chinacloud大数据新闻
    CentOS6.5/7安装配置Samba
    java项目
    学习Java Web开发
  • 原文地址:https://www.cnblogs.com/Rosemajor/p/13369739.html
Copyright © 2011-2022 走看看