使用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.(代码片段

IOS开发-OC学习-常用功能代码片段整理

javaAPI_IO流基础_IO流常见的功能

Java IO流--使用缓冲流实现非文本文件和文本文件的复制