Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中检查文件中的特定字符串_Java_File_Text - Fatal编程技术网

在Java中检查文件中的特定字符串

在Java中检查文件中的特定字符串,java,file,text,Java,File,Text,我试图让我的应用程序读取文本文件并查找字符串。如果该字符串不存在,则使用println生成该字符串。我唯一的问题是它似乎无法读取文本文件。到目前为止,我得到的是: PrintWriter itemwriter = new PrintWriter(new FileOutputStream(items)); FileInputStream fstream = new FileInputStream(items); DataInputStream in = new DataInputStream(fs

我试图让我的应用程序读取文本文件并查找字符串。如果该字符串不存在,则使用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块在最后关闭输入和输出
  • 您不需要使用
    数据输入流
    ——您没有使用其中的任何内容。直接包装输入流即可
  • 我建议您显式地为输入和输出指定编码,而不是信任默认编码。(我希望
    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#的
使用
语句…

首先,你不应该使用流。使用文件读取器和文件写入器


如果您需要更多帮助,请发布您的演示问题的帖子

他已经在使用读卡器和写卡器——它们只是围绕着文件流,这是完全合理的。在我看来,应该明确指定编码,但这是一个稍有不同的问题。
FileReader
FileWriter
选择默认的字符集。更好的解释是,它指向使用流和转换器(
InputStreamReader
OutputStreamWriter
。他已经发布了运行的代码。(您必须附加4行,其中两行是
}
)看起来我真的不懂编码。我同意如果你的程序是唯一一个创建和读取文件的程序,那么你完全可以控制编码。但是你怎么知道文件是如何创建的呢?可能是在Word、记事本或其他编辑器中创建的。这些程序不使用操作系统的默认编码吗如果你不使用默认编码,我必须再次承认,我只在一个操作系统上工作过,无论是通过电子邮件发送的、下载的还是通过上述任何方法创建的,我在阅读任何文本文件时都没有遇到过问题。我使用的文本文件是在记事本中创建的,如果这对你有帮助的话。我认为他们使用的是system的默认编码。