Java 逐行读取文件并搜索文本
我是Java编程新手,目前正在尝试读取文本文件“data.txt” 文本文件包含的数据如下所示: 你好,世界,苹果,气球,积极的 鲨鱼,老虎,水果,阴性 我想逐行读取文件并搜索一个单词,直到第一个分隔符“,”。 如果找到结果,我将通过将该行写入另一个名为output.txt的.txt文件来返回整行 例如,如果我在程序运行后搜索单词“Hello”,output.txt将包含helloworld、apple、balloon和POSITIVE 我曾尝试使用缓冲读取器,但我不确定如何使其工作 以下是我的缓冲读取器初始化代码:Java 逐行读取文件并搜索文本,java,Java,我是Java编程新手,目前正在尝试读取文本文件“data.txt” 文本文件包含的数据如下所示: 你好,世界,苹果,气球,积极的 鲨鱼,老虎,水果,阴性 我想逐行读取文件并搜索一个单词,直到第一个分隔符“,”。 如果找到结果,我将通过将该行写入另一个名为output.txt的.txt文件来返回整行 例如,如果我在程序运行后搜索单词“Hello”,output.txt将包含helloworld、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();
您可以使用下面的程序来实现这一点。程序的第一部分(使用
BufferedReader
读取行)是正确的
我在这里使用了Java的try with resources特性(在Java7中介绍)。它负责在读/写后关闭文件
我已经使用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();
}
}
}
如果您使用的是Java 8或更高版本,则可以使用NIO来完成此操作。NIO是一个现代IO框架,它取代了旧的
文件
,BufferedReader
。。。在许多情况下。它围绕类文件
、路径
和路径
我们将使用文件#行
()流式读取文件的所有行,按,
拆分一行,并用搜索针筛选第一列,然后将它们收集到列表中。最后,我们将使用Files#write
()将列表中的所有剩余行写入您的文件
Path source=Path.get(“D:\\Downloads\\dataAnalysis1.txt”);
Path destination=Path.get(“D:\\Downloads\\output.txt”);
String needle=“你好”;
试一试{
列表行=文件。行(源)
.filter(行->行.split(“,”[0]。包含(指针))
.collect(Collectors.toList());
文件。写入(目标、行);
}捕获(IOE异常){
//如何处理这个问题
e、 printStackTrace();
}
您的问题到底是什么,您发布的代码看起来不错,但我看不到有人试图实现您在问题中描述的逻辑。请注意,Java的现代IO框架NIO可能会在这里派上用场<代码>文件.lines(…).filter(…).collect(Collectors.toList())然后只需文件。写入(…)
。请注意,OP只想在第一列中搜索(直到第一个逗号)。所以你需要检查line.split(“,”[0]
中的contains(searchWord)
@Zabuza,我理解为OP想要搜索整行。我会在问题中问这个问题。@Zabuza,我认为你是对的。现在,当我再次阅读这个问题时,我意识到OP只想搜索第一列。我将相应地编辑我的答案。谢谢
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();
}