使用Java从文件中删除数据

时间:2015-04-14 23:52:41

标签: java

我遇到了删除旧文本行并将其替换为新文本行的问题。然后最终将其存储在文本文件中。新行不是删除旧行,而是与旧文本一起写入,这违背了函数的用途。例如,如果我的data.txt文件包含“我是一个诗人”,我想用“我实际上是一个哲学家”来替换这个句子。第一个与后者连接而不是被删除。任何帮助,将不胜感激。

 public static void removedata(String s) throws IOException {

    File f = new File("data.txt");
    File f1 = new File("data2.txt");
    BufferedReader input = new BufferedReader(new InputStreamReader(
            System.in));
    // String s = "test";
    BufferedReader br = new BufferedReader(new FileReader(f));
    PrintWriter pr = new PrintWriter(f1);
    String line;
    while ((line = br.readLine()) != null) {
        if (line.contains(s)) {
            System.out.println(line + " is found already");

            System.out.println("would you like to rewrite new data?");
            String go = input.readLine();
            if (go.equals("yes")) {
                System.out.println("Enter new Text :");
                String newText = input.readLine();
                line = line.replace(s, newText);
            }
        }

        pr.println(line);
    }
    br.close();
    pr.close();
    input.close();
    Files.move(f1.toPath(), f.toPath(), StandardCopyOption.REPLACE_EXISTING);

}

1 个答案:

答案 0 :(得分:0)

这对评论来说有点大。

如果我从i am a poet的data.txt开始并调用removedata("i am");然后运行程序并输入she is作为新文本,则最终data.txt为{{1 }}。这是按设计工作的 - 只有段she is a poeti am替换,因为这是String.replace的工作方式。获取您所描述的行为的唯一方法是输入she is作为新文本,这将导致i am actually a philosopher的最终data.txt。如果要用用户指定的新文本替换整行,只需更改行:

i am actually a philosopher a poet

为:

line = line.replace(s, newText);

否则,这似乎按预期工作。