2012-08-09 87 views
2

如何在文件内容中使用正则表达式。我有一组文件,我想在所有文件中搜索一个字符串并替换所有文件。java在文件内容中的正则表达式

有人可以帮我吗?如下:

package com.java.far; 
import java.io.*; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 
public class ReplaceAll { 

    public static void main(String[] args)throws IOException { 

     Runtime r=Runtime.getRuntime(); 
     System.out.println(r.freeMemory()); 

     String path="D:\\JOBRELATED\\FAR"; 
     String files; 
     File folder=new File(path); 
     File[] listofFiles=folder.listFiles(); 
     for (int i = 0; i < listofFiles.length; i++) { 
      if (listofFiles[i].isFile()) { 
       files=listofFiles[i].getName(); 
       if(files.endsWith("tex")){ 
       System.out.println(files); 

       BufferedReader br=new BufferedReader(new FileReader("D:\\JOBRELATED\\FAR\\"+files)); 
       String line; 
       while((line=br.readLine())!=null){ 
       Pattern p=Pattern.compile("Diamond in History and Research"); 
       Matcher m=p.matcher(line); 
       int count=0; 
       while (m.find()) { 
        count++; 
        //System.out.println(m.start() +"\t"+ count); 
        System.out.println(line); 
        m.replaceAll("abc"); 


       } 
       } 

      } 
      } 
     } 


    } 
} 
+0

是没可能只使用'sed'?啊......看起来像你在Windows上。 – Nishant 2012-08-09 05:26:52

+0

请注意,正则表达式不适用于大文件。正则表达式本质上是递归的,在使用正则表达式处理大块数据时,会出现StackOverflow异常。 – 2012-08-09 06:09:13

回答

4

看起来像你在正确的轨道;我不知道在文件中会找到替换&的框架。我已经提供了一些其他提示,您可以在其中查看。

您缺少的最后一步是添加一个OutputWriter或类似的输出器。一旦你阅读了文件内容,检查它是否包含匹配&取代它,你应该做一个布尔检查是否进行了更改。如果是,输出文件。

其他评论: 1.你不会需要做listofFiles[i].isFile()如果你使用.listFiles() 2.编译for循环效率之外你的格局。 3.使用动态的for循环,可能更容易:for(final File file : listofFiles)

例子:

final File[] files = new File(".").listFiles(); 
    final Pattern pattern = Pattern.compile(".*a.*"); 
    for(final File file : files) { 
     System.out.println(file.getName()); 
     final BufferedReader reader = new BufferedReader(new FileReader(file)); 
     final StringBuilder contents = new StringBuilder(); 
     while(reader.ready()) { 
      contents.append(reader.readLine()); 
     } 
     reader.close(); 
     final String stringContents = contents.toString(); 
     if(stringContents.toString().matches(".*a.*")) { 
      stringContents.replaceAll("a", "b"); 
      final BufferedWriter writer = new BufferedWriter(new FileWriter(file)); 
      writer.write(stringContents); 
      writer.close(); 
     } 
    } 
+0

你可以提供我的代码,因为我是一个初学者 – 2012-08-09 05:30:34

+0

以上更新示例。因为我没有使用模式或匹配器,你可以决定使用它的方式。 BOth很好,Pattern&Matcher可能更好。 – 2012-08-09 05:40:13

+0

但在哪里给上述代码的文件扩展名 – 2012-08-09 06:42:08