java替换 批量文件中的指定字符串 或者替换流中的字符串

时间:2021-11-23 09:04:07
如题
要批量替换一个文件夹下的所有指定类型的文件内指定的字符串
谁有现成的解决方案?
谢谢!

15 个解决方案

#1


File file = new File("path");
File[] fileList = file.listFiles();
for (File f : fileList) {
if (f.isFile() && (f.getName().endsWith("file type"))) {
// 打开f
// 替换
// 重新写入
}
}

#2


顶!

#3


引用 1 楼 jcyan 的回复:
File file = new File("path"); 
 File[] fileList = file.listFiles(); 
 for (File f : fileList) { 
  if (f.isFile() && (f.getName().endsWith("file type"))) { 
  // 打开f 
  // 替换 
  // 重新写入 
  } 
 }


我也知道是这个过程,关键是中间的实现过程,考虑性能的话可以用流,但是流里面的字符串怎么替换

不采用流怎么操作?

#4


关注,期待更好的解决方案

#5


流都是二进制字节,可以把要替换的字符也转化成二进制字节 进行替换呢 楼主试试看呢 

#6


批量替换高手都出来晒晒吧


几种方式都可以实现
但是都存在问题
谁能给出好点儿的处理代码???

#7


打开文件
构建流

读一行
byte[] b=new byte[4096];
int re = 
inputStream.readLine(b, 0, b.length); 
String str=new string(b,"gbk|gb2312")
//gbk|gb2312根据文件来确定这样才能保证中文处理不出错
str.replace(oldstr,newstr);

#8


如果是txt文本类型的,你可以先用流对整个文件夹进行读取,从中查找你的字符串一行行读,对有的进行替换。

#9


File fi = new File("D://bank//"); 
      File[] file = fi.listFiles(); //得到bank文件夹列表 
      for (int i = 0; i < file.length; i++) { //循环bank文件夹 
        if (file[i].isFile()) { //如果是文件就打印出来 
          String filStr = file[i].getAbsolutePath(); //改一下这个地方这里是打出文件的绝对路径 
          InputStreamReader read = new InputStreamReader(new FileInputStream(filStr), "GBK"); 
          BufferedReader reader = new BufferedReader(read); 
          String line; 
          int count = 0; 
          String OPNO = "", GNIT =""; 
          String[] content = null; 

          String fileStr = filStr.substring(8, 9); 
          while ( (line = reader.readLine()) != null) { //逐行循环读取 
                count++; 
              content = line.split(",");  
              OPNO = content[3].trim(); //预算单位代码 
                OPTP = content[5].trim(); //预算种类 
          }


我这里是查找逗号进行截取的,你可以对每行进行字符串查找,然后在写入流操作。具体的自己构思一下。

#10


又是正则的问题了 用正则替换文字只需要一下 楼主好好去学习下正则表达式

#11


其实要看你是就这么一次,还是项目需求中需要这种字符替换的东西,网上有一些字符替换器,如果你只用一次可以去找找

#12


又有新的疑问
在替换文件内容的时候是在原来的文件中修改还是说新建一个临时文件替换完成后再替换原来的文件

针对这个问题的两种方式,我想问的是第一种情况
怎么在源文件中修改?

#13


感觉已经解决了

#14


问题解决了
自己的方法
有需要代码的进群10939695

#15


解决就结贴吧!

#1


File file = new File("path");
File[] fileList = file.listFiles();
for (File f : fileList) {
if (f.isFile() && (f.getName().endsWith("file type"))) {
// 打开f
// 替换
// 重新写入
}
}

#2


顶!

#3


引用 1 楼 jcyan 的回复:
File file = new File("path"); 
 File[] fileList = file.listFiles(); 
 for (File f : fileList) { 
  if (f.isFile() && (f.getName().endsWith("file type"))) { 
  // 打开f 
  // 替换 
  // 重新写入 
  } 
 }


我也知道是这个过程,关键是中间的实现过程,考虑性能的话可以用流,但是流里面的字符串怎么替换

不采用流怎么操作?

#4


关注,期待更好的解决方案

#5


流都是二进制字节,可以把要替换的字符也转化成二进制字节 进行替换呢 楼主试试看呢 

#6


批量替换高手都出来晒晒吧


几种方式都可以实现
但是都存在问题
谁能给出好点儿的处理代码???

#7


打开文件
构建流

读一行
byte[] b=new byte[4096];
int re = 
inputStream.readLine(b, 0, b.length); 
String str=new string(b,"gbk|gb2312")
//gbk|gb2312根据文件来确定这样才能保证中文处理不出错
str.replace(oldstr,newstr);

#8


如果是txt文本类型的,你可以先用流对整个文件夹进行读取,从中查找你的字符串一行行读,对有的进行替换。

#9


File fi = new File("D://bank//"); 
      File[] file = fi.listFiles(); //得到bank文件夹列表 
      for (int i = 0; i < file.length; i++) { //循环bank文件夹 
        if (file[i].isFile()) { //如果是文件就打印出来 
          String filStr = file[i].getAbsolutePath(); //改一下这个地方这里是打出文件的绝对路径 
          InputStreamReader read = new InputStreamReader(new FileInputStream(filStr), "GBK"); 
          BufferedReader reader = new BufferedReader(read); 
          String line; 
          int count = 0; 
          String OPNO = "", GNIT =""; 
          String[] content = null; 

          String fileStr = filStr.substring(8, 9); 
          while ( (line = reader.readLine()) != null) { //逐行循环读取 
                count++; 
              content = line.split(",");  
              OPNO = content[3].trim(); //预算单位代码 
                OPTP = content[5].trim(); //预算种类 
          }


我这里是查找逗号进行截取的,你可以对每行进行字符串查找,然后在写入流操作。具体的自己构思一下。

#10


又是正则的问题了 用正则替换文字只需要一下 楼主好好去学习下正则表达式

#11


其实要看你是就这么一次,还是项目需求中需要这种字符替换的东西,网上有一些字符替换器,如果你只用一次可以去找找

#12


又有新的疑问
在替换文件内容的时候是在原来的文件中修改还是说新建一个临时文件替换完成后再替换原来的文件

针对这个问题的两种方式,我想问的是第一种情况
怎么在源文件中修改?

#13


感觉已经解决了

#14


问题解决了
自己的方法
有需要代码的进群10939695

#15


解决就结贴吧!