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 ,与文 ...
随机推荐
- golang 三个点 '...' 的用法
package main import "fmt" func main(){ fmt.Println("Hello, World!") aaa := []str ...
- CentOS 桥接网卡配置
[root@controller ~]# cat /etc/sysconfig/network-scripts/ifcfg-br0 DEVICE=br0 ONBOOT=yes TYPE=Bridge ...
- cinderclient命令行源码解析
一.简介 openstack的各个模块中,都有相应的客户端模块实现,其作用是为用户访问具体模块提供了接口,并且也作为模块之间相互访问的途径.Cinder也一样,有着自己的cinder-client. ...
- springboot整合druid监控配置
方式一:直接引入druid 1.maven坐标 <dependency> <groupId>com.alibaba</groupId> <artifactId ...
- 多元线性回归检验t检验(P值),F检验,R方等参数的含义
做线性回归的时候,检验回归方程和各变量对因变量的解释参数很容易搞混乱,下面对这些参数进行一下说明: 1.t检验:t检验是对单个变量系数的显著性检验 一般看p值: 如果p值小于0.05表示该自 ...
- MD笔记
1.力场中的例子电荷是有效电荷(clayff),有别于化学式中的电荷. 2.游离状态的阳离子(如层间阳离子)的电荷不能变动:而Al-O八面体.Si-O四面体中的离子(Al.Si等)电荷可以微调. 3. ...
- 面试官:谈一下你对DDD的理解?我:马什么梅?
领域模型(domain model)是对领域内的概念类或现实世界中对象的可视化表示.领域模型也称为概念模型.领域对象模型和分析对象模型. ——<UML和模式应用> 我们在日常开发中,经常针 ...
- JDK、JRE与JVM之间的关系
初学JAVA很容易被其中的很多概念弄的傻傻分不清楚,首先从概念上理解一下吧: JDK(Java Development Kit)简单理解就是Java开发工具包,JRE(Java Runtime Env ...
- PHP - 附件下载
<?php $file_name = "textuse.zip";//下载文件名 $file_dir = "E:/www/xiazaiwenjian/"; ...
- unity接入安卓SDK,与安卓相互通信
.接SDK是个什么样的活计? SDK的工作流程: 1. 从unity端出发,向安卓发起一系列的请求(unity call android). 2. 安卓端收到unity端调用,然后在具体调用SDK的一 ...