替换/删除文本文件中的行

时间:2013-09-01 10:12:23

标签: java string text replace

public void removeLine() {
        try {
            File dir = new File("chars");
            if(dir.exists()) {
                String read;
                File files[] = dir.listFiles(); 
                for (int j = 0; j < files.length; j++) {
                    File loaded = files[j];
                    if (loaded.getName().endsWith(".txt")) {
                        Scanner s = new Scanner (loaded);
                        while (s.hasNextLine()) {
                            read = s.nextLine();
                            if (read.contains("char-15")) {
                                read.replace(read, "");
                                System.out.println(loaded.getName() +" - Data: "+read);
                                break;                          
                            }                       
                        }                   
                    }           
                }
            }
        } catch (Exception e) {

        }

    }

这应该做的是用空字符串替换包含&#34; char-15&#34;的每一行。

当我运行它时,它不会删除所有文件中的行。我不能手动执行此操作,因为有超过5000个文件。

如何在所有文件中删除此特定行?

4 个答案:

答案 0 :(得分:2)

您可以使用Apache Common IO API

轻松完成此操作

这是完整的工作示例

import java.io.File;
import java.io.IOException;    
import org.apache.commons.io.FileUtils;

public class FileUpdater {

    public static void main(String[] args) throws IOException {
        File dir = new File("D:\\dummy");
        if (dir.exists() && dir.isDirectory()) {
            File[] listFiles = dir.listFiles();
            for (File file : listFiles) {
                if (file.getName().contains(".txt")) {
                    String fileString = FileUtils.readFileToString(file);
                    String finalString = fileString.replaceAll("char-15", "");
                    FileUtils.writeStringToFile(file, finalString);
                }

            }
        }
    }

}

以上代码会在每个文件中replace char-15empty

}

答案 1 :(得分:0)

在Java 7中,您可以执行以下操作:

if (loaded.getName().endsWith(".txt")) {
   Path path = Paths.get(loaded.getName());
   String content = new String(Files.readAllBytes(path));
   content = content.replaceAll("char-15", "");
   Files.write(path, content.getBytes());
}

答案 2 :(得分:0)

Java字符串是不可变的和最终的,无论你在String中做什么操作,它都只会创建新的实例。因此read.replace(read, "");无法替换文件中的单词。

答案 3 :(得分:0)

首先将文件加载为String:

public static String readAllText(InputStream is) {
    StringBuilder sb = new StringBuilder();
    try {
        Reader r = new InputStreamReader(is);
        int c;
        while ((c = r.read()) != -1) sb.append(char.class.cast(c));
    } catch (Exception e) {
        //Handle Exception
    }
    return sb.toString();
}

然后删除:

public static String removeUntil(String str, String c, int st)
{
    StringBuilder sb = new StringBuilder(str);
    str = sb.reverse().toString();
    for(int i = 0;i<st;i++)
        str = str.substring(0,str.lastIndexOf(c));
    sb = new StringBuilder(str);
    str = sb.reverse().toString();
    return str;
}

代表:removeUntil(&#34; I.want.remove.this.until.third.dot&#34;,&#34;。&#34;,3);那么结果 - &gt; this.until.third.dot