逐行读取文件并搜索文本

时间:2019-02-10 09:10:29

标签: java

我是Java编程的新手,目前正在尝试从文本文件“ data.txt”读取

文本文件包含如下所示的数据:

世界,苹果,气球,积极

鲨鱼,老虎,水果,阴性

我想逐行读取文件并搜索一个单词,直到第一个定界符“,”。 如果找到结果,那么我将通过将该行写入另一个名为output.txt的.txt文件中来返回整行。

例如,如果我在程序运行后搜索单词“ Hello”,则output.txt将包含Hello world,apple,balloon和POSITIVE

我尝试使用缓冲读取器,但是不确定如何使它工作。

这是我的缓冲读取器初始化代码:

    BufferedReader in = new BufferedReader(new 
    FileReader("D:\\Downloads\\dataAnalysis1.txt"));  
  String line;
  while((line = in.readLine()) != null)
  {
      System.out.println(line);
      // extract by lines and write to file 

  }
  in.close();

2 个答案:

答案 0 :(得分:2)

如果您使用的是Java 8或更高版本,则可以使用 NIO 进行此操作。 NIO是一种现代的IO框架,在许多情况下都替代了旧的FileBufferedReader...。它围绕类FilesPathsPath展开。

我们将使用Files#linesdocumentation)来流式读取文件的所有行,用,分隔行,并用搜索针过滤第一列,然后收集它们进入列表。最后,我们将使用Files#writedocumentation)将列表中剩余的所有行写入文件。

Path source = Paths.get("D:\\Downloads\\dataAnalysis1.txt");
Path destination = Paths.get("D:\\Downloads\\output.txt");

String needle = "Hello";

try {
    List<String> lines = Files.lines(source)
        .filter(line -> line.split(",")[0].contains(needle))
        .collect(Collectors.toList());
    Files.write(destination, lines);
} catch (IOException e) {
    // TODO Handle the problem
    e.printStackTrace();
}

答案 1 :(得分:1)

您可以使用以下程序实现此目的。程序的第一部分(使用BufferedReader读取行)是正确的。

我在这里使用了Java的try-with-resources功能(在Java 7中引入)。它将在读取/写入后关闭文件。

我已经使用String.contains() API来检查搜索到的单词是否在一行中。然后,我使用BufferedWriter将匹配的行写入输出文件。

import java.io.*;

public class FindWord
{
  public static void main(String[] args)
  {
    String searchWord = "Hello";

    try (BufferedReader in = new BufferedReader(
            new FileReader("D:\\Downloads\\dataAnalysis1.txt"));
         BufferedWriter out = new BufferedWriter(
             new FileWriter("D:\\Downloads\\output.txt")))
    {
      String line;
      while ((line = in.readLine()) != null)
      {
        System.out.println(line);

        // extract by lines and write to file
        String firstColumn =  line.split(",")[0];
        if (firstColumn.contains(searchWord))
        {
          out.write(line);
          out.newLine();
        }
      }
    }
    catch (IOException ex)
    {
      ex.printStackTrace();
    }
  }
}