使用IO流完成文本的替换功能
Posted 野生java研究僧
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用IO流完成文本的替换功能相关的知识,希望对你有一定的参考价值。
文章目录
最近复习了下IO流,就想着完成个小功能,可以读取文本中的内容,然后找到需要替换的文本,进行替换,目前来说,没看到有乱码现象,也没有读取不完整的情况,不过缺点还是比较大,都是将内容放入到了一个字符串中,显然这不太合适,但是一般的文本是没有问题的,比如查找了多少处?这些都是需要后续完善的。
/**
* Created with IntelliJ IDEA.
*
* @Author: compass
* @Date: 2021-12-14-1:24
* @Version:1.0
* @Description: 文件替换
*/
public class Demo
public static void main(String[] args) throws Exception
String filename3= "src\\\\main\\\\webapp\\\\jvm.md";
String source= "private";
String target = "public";
// 将jvm.md中的所有private替换为public
replace( source, target, filename3);
/**
* 得到文本转化后的字符串,重新写入文件
* @param source 需要查找的字符串
* @param target 需要替换的字符串
* @param filePath 文件路径
*/
private static void replace(String source, String target, String filePath)
File file = new File(filePath);
file.setWritable(true);
String content = read(filePath);
String newContent = content.replace(source, target);
try ( FileOutputStream os = new FileOutputStream(filePath);)
System.out.println("替换后的内容:\\n"+newContent);
os.write(newContent.getBytes("UTF-8"));
file.setLastModified(System.currentTimeMillis());
os.flush();
catch (IOException e)
e.printStackTrace();
/**
* 先读取文本中的所有内容,转化为一个字符串
* @param filePath
* @return
*/
public static String read(String filePath)
String result = null;
try (FileInputStream in = new FileInputStream(filePath);
ByteArrayOutputStream outStream=new ByteArrayOutputStream())
byte[] bytes = new byte[1024];
int readCount;
while ((readCount = in.read(bytes)) != -1)
// 先暂时存到缓冲区
outStream.write(bytes, 0, readCount);
outStream.flush();
byte[] byteArray = outStream.toByteArray();
result = new String(byteArray, 0, byteArray.length, "UTF-8");
catch (IOException e)
e.printStackTrace();
return result;
运行结果:替换成功,而且没有损坏源文件,也没有出现少内容,乱码的情况
以上是关于使用IO流完成文本的替换功能的主要内容,如果未能解决你的问题,请参考以下文章
java内存流:java.io.ByteArrayInputStreamjava.io.ByteArrayOutputStreamjava.io.CharArrayReaderjava.io(代码片段
JAVA IO流相关代码(FileWriter,FileReader)
java缓冲字符字节输入输出流:java.io.BufferedReaderjava.io.BufferedWriterjava.io.BufferedInputStreamjava.io.(代码片段