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
Java io实现读取文件特殊内容进行替换的更多相关文章
- java Io流向指定文件输入内容
package com.hp.io; import java.io.*; public class BufferedWriterTest{ public static void main(String ...
- Java IO之一读取文件
package com.lf.iopreoject; import java.io.BufferedReader; import java.io.File; import java.io.FileIn ...
- Java IO流读取文件
使用指定编码读取文件 public static String toString(File file, String charset){ StringBuilder result = new Stri ...
- Java 读取文件的内容
Java 读取文件的内容 1) CLASS_NAME: 换成自己真实的类名 2) /page/test.json: 换成自己真实的page 3) FileUtils: 来自于org.apache.co ...
- Java:IO流与文件基础
Java:IO流与文件基础 说明: 本章内容将会持续更新,大家可以关注一下并给我提供建议,谢谢啦. 走进流 什么是流 流:从源到目的地的字节的有序序列. 在Java中,可以从其中读取一个字节序列的对象 ...
- Java相对路径读取文件
不管你是新手还是老鸟,在程序中读取资源文件总会遇到一些找不到文件的问题,这与Java底层的实现有关,不能算bug,只要方法得当,问题还是可以解决的. 项目的文件夹结构: repathtest ├─sr ...
- java多线程批量读取文件(七)
新公司入职一个多月了,至今没有事情可以做,十来个新同事都一样抓狂,所以大家都自己学习一些新东西,我最近在看zookeeper,感觉蛮不错的,和微服务的zuul以及eureka功能类似,只是代码复杂了一 ...
- java IO流读取图片供前台显示
最近项目中需要用到IO流来读取图片以提供前台页面展示,由于以前一直是用url路径的方式进行图片展示,一听说要项目要用IO流读取图片感觉好复杂一样,但任务下达下来了,做为程序员只有选择去执行喽,于是找了 ...
- java io流 对文件夹的操作
java io流 对文件夹的操作 检查文件夹是否存在 显示文件夹下面的文件 ....更多方法参考 http://www.cnblogs.com/phpyangbo/p/5965781.html ,与文 ...
随机推荐
- Redis哨兵模式的配置
绪论 现有三台设备,192.168.137.11.192.168.137.12和192.168.137.13,要求在三台设备上实现redis哨兵模式,其中192.168.137.11为master,其 ...
- TypeScript 安装及基础运行环境搭建
安装 TypeScript npm install -g typescript 安装成功后,命令行输入 tsc -v 命令提示当前安装的 TypeScript 版本: 出现版本号即安装成功. 使用 V ...
- 团队作业3:需求改进&系统设计
一.需求&原型改进: 1.1 选题需求改进 用户:同学你好,有什么事我们能帮到你 我:我要说的事……(咽口水)你们千万别害怕 用户:我们是杠精,我们不会怕,您请说 我:我们要做一个roguel ...
- muduo源码解析5-mutex相关类
mutexlock和mutexlockguard class mutexlock:noncopyable { }: class mutexlockguard:noncopyable { }: 作用: ...
- smtplib文字邮件的发送
今天跟大家讲解一下接口测试框架的知识准备阶段,首先是发送纯文字的电子邮件,会的同学可以忽略,不会的就多敲几遍,直到自己能敲出来为止~~ # coding: utf-8import smtplibfro ...
- Unimrcp通过Vendor传递随路数据
摘要 项目中需要在MRCPV2的识别消息中,传递一些随路数据.
- HTTP系列:缓存
先看一些概念性的术语: 命中率:由缓存提供服务的请求所占的比例被称为缓存命中率: 缓存未命中:其实就是一些到达缓存的请求没有副本可用,而被转发给原始服务器: 再验证:原始服务器上内容可能会发生变化,缓 ...
- 盒子上下滚动到js 底部触发的事件
//html是用法举列子,js亲测有效(把这段js#scro加到你要滚动的盒子) <div id="scro"> <div>1</div> & ...
- 【Unity C#编程】自定义数据
译林军 灰魅|2014-03-04 10:52|10589次浏览|Unity(315)移动应用(31)技术开发(16)0 在这篇Unity C#的文章中,你将会创建一个简单的数据结构,然后写下它的属性 ...
- Linq 下的扩展方法太少了,您期待的 MoreLinq 来啦
一:背景 1. 讲故事 前几天看同事在用 linq 给内存中的两个 model 做左连接,用过的朋友都知道,你一定少不了一个叫做 DefaultIfEmpty 函数,这玩意吧,本来很流畅的 from. ...