侧边栏壁纸
博主头像
gale-blog博主等级

少年一贯快马扬帆,道阻且长不转弯,要盛大,要绚烂,要哗然,要用理想的泰坦尼克号去撞现实冰川,要当烧赤壁的风,而非借箭草船,要为了一片海,就肯翻万山

  • 累计撰写 39 篇文章
  • 累计创建 5 个标签
  • 累计收到 5 条评论

目 录CONTENT

文章目录

Files.lines()的用法

二月在这里
2024-07-03 / 0 评论 / 0 点赞 / 10 阅读 / 7855 字

Files.lines()的用法

介绍

在 Java 8 中,Files.lines() 是一个非常方便的方法,用于读取文件中的所有行并返回一个流(Stream)对象。它可以用于处理大型文件,而无需一次性将整个文件加载到内存中。

Files.lines() 方法的使用方式如下:

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.stream.Stream;

public class Main {
    public static void main(String[] args) {
        Path filePath = Paths.get("path/to/file.txt");

        try (Stream<String> lines = Files.lines(filePath)) {
            lines.forEach(System.out::println);
            
//            lines.forEach(line -> {
//                String content = line; // 将每行内容存储到字符串变量中
//                System.out.println(content); // 打印每行内容
//            });
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

  上述代码演示了如何使用 Files.lines() 方法读取指定文件的所有行。首先,我们需要提供文件的路径(可以使用 Path.of() 方法创建 Path 对象)。然后,我们使用 Files.lines() 方法打开文件并返回一个包含文件中所有行的流对象。

在 try-with-resources 语句块中使用 Files.lines() 方法,这样可以确保在使用完流后自动关闭文件资源。在 try 代码块中,我们可以使用流的各种操作来处理文件的每一行。在上述示例中,我们使用 forEach() 方法打印每一行。

  需要注意的是,Files.lines() 方法返回的是一个延迟执行的流,这意味着在调用终止操作之前,不会实际读取文件的内容。这使得它非常适合处理大型文件,因为它可以按需读取文件的行,而不必一次性加载整个文件。此外,Files.lines() 方法还可以接受一个可选的字符集参数,用于指定文件的字符编码。例如,可以使用 Files.lines(filePath, Charset.forName("UTF-8")) 来读取使用 UTF-8 编码的文件。

  总结起来,Files.lines() 方法是 Java 8 中用于读取文件中所有行的便捷方法。它返回一个流对象,可以使用流的各种操作来处理文件的每一行。它的使用方式简单明了,并且适用于处理大型文件。

 

示例

以下是一些关于如何使用Files.lines()方法的其他示例代码:

统计文件中的行数:

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;

public class Main {
    public static void main(String[] args) {
        Path filePath = Path.of("path/to/file.txt");

        try {
            long lineCount = Files.lines(filePath).count();
            System.out.println("Total lines: " + lineCount);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

上述代码使用Files.lines()方法读取文件的所有行,并使用count()方法计算行数。

过滤文件中的特定行:

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;

public class Main {
    public static void main(String[] args) {
        Path filePath = Path.of("path/to/file.txt");

        try {
            Files.lines(filePath)
                    .filter(line -> line.contains("keyword"))
                    .forEach(System.out::println);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

上述代码使用Files.lines()方法读取文件的所有行,并使用filter()方法过滤包含特定关键字的行。

将文件中的行转换为对象:

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {
        Path filePath = Path.of("path/to/file.txt");

        try {
            List<Person> persons = Files.lines(filePath)
                    .map(line -> {
                        String[] parts = line.split(",");
                        String name = parts[0];
                        int age = Integer.parseInt(parts[1]);
                        return new Person(name, age);
                    })
                    .collect(Collectors.toList());

            persons.forEach(System.out::println);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    static class Person {
        private String name;
        private int age;

        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }

        @Override
        public String toString() {
            return "Person{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }
    }
}

上述代码使用Files.lines()方法读取文件的所有行,并将每一行转换为Person对象。通过使用map()方法和自定义的转换逻辑,我们可以将每一行拆分为姓名和年龄,并创建相应的Person对象。

这些示例代码展示了如何使用Files.lines()方法处理文件的每一行。你可以根据具体的需求使用流的各种操作来处理文件的内容。希望这些示例能帮助你更好地理解Files.lines()方法的用法。

查找文件中包含特定单词的行数:

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;

public class Main {
    public static void main(String[] args) {
        Path filePath = Path.of("path/to/file.txt");
        String searchWord = "example";

        try {
            long lineCount = Files.lines(filePath)
                    .filter(line -> line.contains(searchWord))
                    .count();
            System.out.println("Lines containing '" + searchWord + "': " + lineCount);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

上述代码使用Files.lines()方法读取文件的所有行,并使用filter()方法过滤包含特定单词的行,最后使用count()方法计算匹配的行数。

 将文件中的行排序并写入新文件:

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardOpenOption;
import java.util.Comparator;

public class Main {
    public static void main(String[] args) {
        Path inputFilePath = Path.of("path/to/input.txt");
        Path outputFilePath = Path.of("path/to/output.txt");

        try {
            Files.lines(inputFilePath)
                    .sorted(Comparator.reverseOrder())
                    .forEach(line -> {
                        try {
                            Files.writeString(outputFilePath, line + "\n", StandardOpenOption.CREATE, StandardOpenOption.APPEND);
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    });
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

上述代码使用Files.lines()方法读取输入文件的所有行,并使用sorted()方法对行进行逆序排序。然后,使用forEach()方法将每一行写入输出文件中。在写入文件时,我们使用Files.writeString()方法,并指定StandardOpenOption.CREATEStandardOpenOption.APPEND选项来创建新文件并追加内容。

这些示例代码展示了如何使用Files.lines()方法处理文件的每一行,并进行各种操作,如过滤、计数、映射和排序。你可以根据具体的需求使用流的各种方法来处理文件的内容。希望这些示例能够帮助你更好地理解

0

评论区