Java实现批量替换文本文档中内容

Java实现批量替换文本文档中内容
有更好的方案大佬们也可以在评论区指出

import java.io.*;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class FileUtil {
    //存储要修改的内容
    private final Map<String, String> map;

    public FileUtil(Map<String, String> map) {
        this.map = map;
    }

    public static void main(String[] args) {

        //读取指定文件夹下的所有文件
        //给我你的目录文件夹路径
        String filepath = "F:\\A";
        File file = new File(filepath);
        Map<String, String> map = new HashMap<>();
        map.put("要修改的内容1", "修改的内容1");
        map.put("要修改的内容2;", "修改的内容2");
        new FileUtil(map).refreshFileList(file);
        
    }

    public void refreshFileList(String filepath) {
        refreshFileList(new File(filepath));
    }

    public void refreshFileList(File filepath) {
        if (!filepath.exists()) {
            System.out.println("此路径不存在");
            return;
        }
        File[] fileList = filepath.listFiles();
        if (fileList == null || fileList.length < 1) {
            System.out.println("空文件夹");
            return;
        }
        for (File file : fileList) {
            if (file.isDirectory()) {
                //如果是文件夹递归扫描
                refreshFileList(file);
            } else {
                String filename = file.getName();//读到的文件名
                String strFileName = file.getAbsolutePath();//文件路径
                //截取文件格式
                String SufName = filename.substring(filename.lastIndexOf(".") + 1);
                //排除不需要扫描的文件
//                if (SufName.equals("rar") || SufName.equals("jpg") || SufName.equals("png") || SufName.equals("jar") || SufName.equals("doc") || SufName.equals("xls") || SufName.equals("gif") || SufName.equals("wmz")) {
//                    continue;
//                }
                //或者指定扫描文件
                if (SufName.equalsIgnoreCase("html") || SufName.equalsIgnoreCase("java")) {
                    changeFile(file);
                }
            }
        }
    }

    /**
     * 修改文件
     *
     * @param file
     */
    private void changeFile(File file) {
        String s = null;
        try (FileInputStream fis = new FileInputStream(file);
             BufferedReader reader = new BufferedReader(new InputStreamReader(fis));) {

            //之所以用BufferedReader,而不是直接用BufferedInputStream读取,是因为BufferedInputStream是InputStream的间接子类,
            //InputStream的read方法读取的是一个byte,而一个中文占两个byte,所以可能会出现读到半个汉字的情况,就是乱码.
            //BufferedReader继承自Reader,该类的read方法读取的是char,所以无论如何不会出现读个半个汉字的.
            StringBuilder result = new StringBuilder();
            while (reader.ready()) {
                result.append((char) reader.read());
            }
            s = result.toString();
            Set<Map.Entry<String, String>> entries = map.entrySet();
            for (Map.Entry<String, String> mapKey : entries) {
                if (s.contains(mapKey.getKey())) { //判断当前行是否存在想要替换掉的字符 
                    s = s.replace(mapKey.getKey(), mapKey.getValue());//替换为你想替换的内容
                }
            }

        } catch (IOException e) {
            e.printStackTrace();
        }

        writerFile(s, file);

    }

    /**
     * 写入文件
     *
     * @param s
     * @param file
     */
    public void writerFile(String s, File file) {
        try (FileOutputStream fos = new FileOutputStream(file);
             BufferedOutputStream bos = new BufferedOutputStream(fos)) {
            bos.write(s.getBytes());
            System.out.println("文件修改成功!");
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("文件修改失败!");
        }
    }

}

你可能感兴趣的:(java,java,开发语言,后端)