基本的java I / O文本替换,没有获得预期的输出

时间:2012-01-31 02:01:00

标签: java io

我有一个包含数据库表数据的文本文件,我试图删除表的一部分。这就是文件中的内容:

name= john
name= bill
name= tom
name= bob
name= mike

这是我的编译和运行的java代码,但输出不是我预期和卡住的。

import java.io.*;
public class FileUtil {

    public static void main(String args[]) {

        try {

            FileInputStream fStream = new FileInputStream("\\test.txt");
            BufferedReader in = new BufferedReader(new InputStreamReader(fStream));


            while (in.ready()) {
                //System.out.println(in.readLine());
                String line = in.readLine();
                String keyword = "name="; //keyword to delete in txt file
                String newLine=line.replaceAll(keyword,""); //delete lines that say name=
                BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("testEdited.txt"));
                out.write(newLine.getBytes());
                out.close();

            }
            in.close();

        } catch (IOException e) {
            System.out.println("File input error");
        }

    }
}

testEdited文件中的输出是:

麦克

显然我想留下5个名字。谁能帮我吗? 感谢

3 个答案:

答案 0 :(得分:2)

试试这个:

BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("testEdited.txt",true));

true会将数据附加到您的文件中。

答案 1 :(得分:2)

试试这个......

        String line;
        BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("testEdited.txt"));

        while ((line = in.readLine()) != null) {
            String newLine=line.replaceAll("name=","");
            out.write(newLine.getBytes());
        }
        out.close();
        in.close();

无需继续打开和关闭输出文件。

同样关于“name =”声明,分配给变量并且仅在紧随其后的行上使用它没有多大意义。如果它需要是一个共享常量,请在某个类的某个地方将其声明为(private|public) static final String foo = "bar";

此外,将文件输出流(或文件编写器)包装在适当的缓冲版本中没有多大好处,操作系统将自动为您缓冲写入,并且它在这方面做得很好。

您还应该使用阅读器替换您的流,并在finally块中关闭您的文件。

答案 2 :(得分:0)

您无法使用BufferedInputStream/BufferedOutputStream进行并行读写操作。 如果您想同时读取和写入文件,请使用RandomAccessFile