最近公司在做一个项目其中一个需求是读取文件中的特殊字符在其后进行添加或删除字符操作,本来想直接使用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

Java io实现读取文件特殊内容进行替换的更多相关文章

  1. java Io流向指定文件输入内容

    package com.hp.io; import java.io.*; public class BufferedWriterTest{ public static void main(String ...

  2. Java IO之一读取文件

    package com.lf.iopreoject; import java.io.BufferedReader; import java.io.File; import java.io.FileIn ...

  3. Java IO流读取文件

    使用指定编码读取文件 public static String toString(File file, String charset){ StringBuilder result = new Stri ...

  4. Java 读取文件的内容

    Java 读取文件的内容 1) CLASS_NAME: 换成自己真实的类名 2) /page/test.json: 换成自己真实的page 3) FileUtils: 来自于org.apache.co ...

  5. Java:IO流与文件基础

    Java:IO流与文件基础 说明: 本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦. 走进流 什么是流 流:从源到目的地的字节的有序序列. 在Java中,可以从其中读取一个字节序列的对象 ...

  6. Java相对路径读取文件

    不管你是新手还是老鸟,在程序中读取资源文件总会遇到一些找不到文件的问题,这与Java底层的实现有关,不能算bug,只要方法得当,问题还是可以解决的. 项目的文件夹结构: repathtest ├─sr ...

  7. java多线程批量读取文件(七)

    新公司入职一个多月了,至今没有事情可以做,十来个新同事都一样抓狂,所以大家都自己学习一些新东西,我最近在看zookeeper,感觉蛮不错的,和微服务的zuul以及eureka功能类似,只是代码复杂了一 ...

  8. java IO流读取图片供前台显示

    最近项目中需要用到IO流来读取图片以提供前台页面展示,由于以前一直是用url路径的方式进行图片展示,一听说要项目要用IO流读取图片感觉好复杂一样,但任务下达下来了,做为程序员只有选择去执行喽,于是找了 ...

  9. java io流 对文件夹的操作

    java io流 对文件夹的操作 检查文件夹是否存在 显示文件夹下面的文件 ....更多方法参考 http://www.cnblogs.com/phpyangbo/p/5965781.html ,与文 ...

随机推荐

  1. JUC----04

    目录 1.1 读写问题 1.1 读写问题 ReadWriteLockUnsafeDemo: public class ReadWriteLockUnsafeDemo { // TODO: 2020/7 ...

  2. 【转】Ubuntu下解决Depends: xxx(< 1.2.1) but xxx is to be installed

    在ubuntu下由于更新package不成功,或者误删除了一些文件会出现Depends: xxx(< 1.2.1) but xxx is to be installed解决方法是先试着安装所缺的 ...

  3. 要有一颗理财的心 - 读<富爸爸.穷爸爸>

    记得工作没多久后的一次加薪的例行谈话.部门经理和我说,不能靠工资过日子,要多想想怎么投资,我的主要财富就是靠投资赚来的.当时第一反应,老板,你不给我加薪找这借口也太牵强了吧.我的收入只有工资,我的工资 ...

  4. 每日一学-python calendar

    python模块之calendar方法详细介绍 1.首先我们看下calendar的内置函数和相关的属性: import calendar dir(calendar) ['Calendar', 'EPO ...

  5. failed to resolve org.junit.platform

    IDEA提示:failed to resolve org.junit.platform,如下图 方法一:修改Maven镜像 D:\Program Files\apache-maven-3.6.3-pc ...

  6. 2020.08.31 Unit 10(暂未完成)

    [重点短语] 01.at night 在晚上 02.in a more natural environment 在一个更加自然的环境中 03.all year round 一年到头,终年 04.be ...

  7. Typed Lua

    https://the-ravi-programming-language.readthedocs.io/en/latest/ravi-overview.html https://github.com ...

  8. 入门的艰难——关于LR的使用

    这年头做一件事真是TM不容易啊.做测试也很纠结,不是都说商业工具很强大么,我去,这个不支持那个不支持的,这还有什么搞头,还非要按照你说的这个版本的才行,高一点的就crash了,结果连最初级的录制脚本都 ...

  9. Android反解符号表工具

    cd ~/android-ndk-r13b/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin ./arm-linux-an ...

  10. Fragment 1.2.0 更新记录

    1.官方地址 https://developer.android.com/jetpack/androidx/releases/fragment 2.引入方法 dependencies { def fr ...