我是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();
答案 0 :(得分:2)
如果您使用的是Java 8或更高版本,则可以使用 NIO 进行此操作。 NIO是一种现代的IO框架,在许多情况下都替代了旧的File
,BufferedReader
...。它围绕类Files
,Paths
和Path
展开。
我们将使用Files#lines
(documentation)来流式读取文件的所有行,用,
分隔行,并用搜索针过滤第一列,然后收集它们进入列表。最后,我们将使用Files#write
(documentation)将列表中剩余的所有行写入文件。
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();
}
}
}