1
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) {

        }

    }

这应该做的是用空字符串替换包含“char-15”的每一行。

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

如何让它删除所有文件中的这一特定行?

4

4 回答 4

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每个文件中

}

于 2013-09-01T10:36:48.637 回答
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());
}
于 2013-09-01T10:32:23.250 回答
0

首先将文件加载为字符串:

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("I.want.remove.this.until.third.dot",".",3); 然后结果-> this.until.third.dot

于 2014-08-25T10:22:47.447 回答
0

Java sting 是不可变的和最终的,无论您在 String 中进行的任何操作,它都只会创建新实例。因此read.replace(read, "");,替换文件中的单词无济于事。

于 2013-09-01T10:39:21.520 回答