gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:39:05 24 4
gpt4 key购买 nike

我试图让我的应用程序读取文本文件并查找字符串。如果该字符串不存在,则使用 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);
}

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

最佳答案

您正在尝试同时读取和写入同一个文件。虽然可能有办法让它发挥作用,但它会很繁琐。

我建议您从文件 A 中读取并写入文件 B - 如果您想有效地替换输入文件,那么您可以在最后进行一系列移动和删除操作。

其他一些建议:

  • 您应该使用 try/finally block 来在最后关闭输入和输出。
  • 您不需要使用DataInputStream - 您没有使用其中的任何内容。直接包装输入流即可。
  • 我建议您明确指定输入和输出的编码,而不是信任默认编码。 (我希望 FileWriterFileReader 在其构造函数中接受编码。)
  • 使用 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 block 让这变得如此繁琐。噢,对于 C# 的 using 语句...

关于java - 在 Java 中检查文件中的某个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1657452/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com