在java中检查文件中的某个字符串

cmssoen2  于 2021-07-05  发布在  Java
关注(0)|答案(2)|浏览(413)

我试图让我的应用程序读取文本文件并查找字符串。如果字符串不存在,则使用println。我唯一的问题是它似乎无法读取文本文件。到目前为止我得到的是:

PrintWriter itemwriter = new PrintWriter(new FileOutputStream(items));
FileInputStream fstream = new FileInputStream(items);
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));

String strLine;

while ((strLine = br.readLine()) != null)   {
    if (strLine.contains(name)) {
        //do nothing, the item already is in the database.
    } else {
        itemwriter.println(name);
}

但这似乎不管用。有什么建议吗?

knpiaxh1

knpiaxh11#

你试图同时读写同一个文件。虽然可能有办法让它发挥作用,但这将是一个棘手的问题。
我建议您读取文件a并写入文件b—如果您想有效地替换输入文件,那么您可以在最后执行一系列移动和删除操作。
其他一些建议:
您应该有try/finally块来关闭最后的输入和输出。
你不需要使用 DataInputStream -你不能用它的任何东西。直接 Package 输入流。
我建议您显式地为输入和输出指定编码,而不是信任默认编码(我希望如此 FileWriter 以及 FileReader 在其构造函数中接受编码。)
使用起来更健壮 OutputStreamWriter (或类似的东西)而不是 PrintWriter -目前,你在写作时不会发现任何错误。
比如说:

// Ideally have this as a constant somewhere.
Charset utf8 = Charset.forName("UTF-8");

BufferedReader reader = new BufferedReader(new InputStreamReader(
    new FileInputStream(inputFile), utf8);
try {
  try {
    BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(
        new FileOutputStream(outputFile), utf8);

    String line;
    while ((line = reader.readLine()) != null) {
      if (!line.contains(name)) {
        writer.write(line);
        writer.newLine();
      }
    }
  } finally {
    writer.close();
  }
} finally {
  reader.close();
}
// Now if you want to shift files around, do it here

遗憾的是,java将try/finally块做得如此巧妙。哦,为了c# using 声明。。。

kq0g1dla

kq0g1dla2#

首先,你不应该使用流。使用文件读取器和文件编写器。
如果您需要更多帮助,请发布您的sscce以显示问题。

相关问题