我有一个包含数据库表数据的文本文件,我试图删除表的一部分。这就是文件中的内容:
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个名字。谁能帮我吗? 感谢答案 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
。