java - 如何在不逐行遍历的情况下查找 BufferedReader 类对象是否包含特定单词?

标签 java bufferedreader

我有一些日志文件,其中生成日志的文件名写入未知行。

存在生成日志的固定文件。因此这些文件的名称为:Image_1、Image_5、Image_10、Image_25。

为了获取生成日志的文件的名称,我必须逐行迭代 BufferedReader br 并检查所有 4 个名称,如果该名称出现在某行中,则需要花费大量时间。

是否有任何方法可以迭代这 4 个名称并检查 Bufferedreader 中的特定单词是否包含在 BufferedReader 对象中。类似于 BufferedReader 的 String.contains("s") 。有可能这样还是有更好的选择?

最佳答案

可以为 BufferedReader 指定缓冲区大小,但您必须实际读取行。最简单的是:

Path path = Paths.get("my.log");
// Assume UTF-8 (is default):
Optional<String> img = Files.lines(path)
    .filter(line -> line.matches("Image_(10?|5|25).*"))
    .findAny();
String file = img.orElse("NOT FOUND");

或更好

try (Stream<String> in = Files.lines(path)) {
    Optional<String> img = in
        .filter(line -> line.matches("Image_(10?|5|25).*")
        .findAny();
    String file = img.orElse("NOT FOUND");
}

澄清:

可以读取一些字节缓冲区并将其转换为字符串以进行搜索。 问题是对于 UTF-8,缓冲区可能以分割的多字节序列结束。 不难处理,但为什么不使用简单的代码,而不依赖于缓冲区大小。

关于java - 如何在不逐行遍历的情况下查找 BufferedReader 类对象是否包含特定单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58842067/

相关文章:

Java 将带有参数化枚举的泛型类作为参数传递给另一个泛型对象

java - play 2.0 如何定义具有多个按键的取景器

java - 从文件读取时获取存储在对象 arrayList 内的不正确数据

java - 如何读取Excel中的每一行并保存在 map 中

java - StringBuffer 不会将整个流读入字符串 (JAVA/Android)

java - OkHttp:避免泄漏连接警告

java - Angular2 Spring启动日期序列化

java - 解决在 SWT FXCanvas 中嵌入 JavaFX 时的 DPI 缩放问题

Java,从文件中读取对象并将它们添加到数组列表中

java - 优化 BufferedReader readLine() 操作