package com.xiaoyun;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
public class ReadFile {
public static void main(String[] args) {
String filePath = "C:\\"; //给我你要读取的文件夹路径
String t1 = "";// 需要替换的文字
String t2 = ""; // 替换成的文字
String endWith = ""; //查找的文件名后缀
readFolder(filePath, t1, t2, endWith);
}
/**
* 读取文件夹
*
* @return
*/
public static void readFolder(String filePath, String t1, String t2, String pathName) {
//读取指定文件夹下的所有文件
File file = new File(filePath);
fileNames(file);
//创建一个可缓存的线程池,多线程并行执行
ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
for (File fileItem : fileList) {
//自定义修改匹配文件规则
if (fileItem.getName().endsWith(pathName)) {
cachedThreadPool.execute(() -> {
readFile(fileItem.getAbsolutePath(), t1, t2);//调用 readFile 方法读取文件夹下所有文件
});
}
}
cachedThreadPool.shutdown();
}
private static List<File> fileList = new ArrayList<>();
private static void fileNames(File name) {
if (name.isDirectory()) {
File[] files = name.listFiles();
for (File fileItem : files) {
fileNames(fileItem);
}
} else {
fileList.add(name);
}
}
/**
* 读取文件夹下的文件
*
* @return
*/
public static void readFile(String path, String t1, String t2) {
try (BufferedReader bufReader = new BufferedReader(new InputStreamReader(new FileInputStream(path)))) {
//数据流读取文件
StringBuilder strBuilder = new StringBuilder();
String temp;
while ((temp = bufReader.readLine()) != null) {
if (temp.indexOf(t1) != -1) { //判断当前行是否存在想要替换掉的字符 -1表示存在
temp = temp.replaceAll(t1, t2);
}
strBuilder.append(temp);
strBuilder.append(System.lineSeparator());//行与行之间的分割
}
try (BufferedWriter bufWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(path)))){
bufWriter.write(strBuilder.toString());
bufWriter.flush();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
java 替换文件中指定的字符串
最新推荐文章于 2025-02-26 15:20:33 发布