📜  逐行读取大型文本文件的Java程序(1)

📅  最后修改于: 2023-12-03 15:28:22.486000             🧑  作者: Mango

逐行读取大型文本文件的Java程序

在Java编程过程中,我们经常会遇到需要处理大型文本文件的情况。当处理大型文本文件时,我们通常不希望一次将整个文件读入内存,否则会导致内存不足的问题。因此,我们需要一种方法能够逐行读取大型文本文件。本文将介绍如何使用Java编写逐行读取大型文本文件的程序。

1. 利用Java中的BufferedReader类逐行读取文本文件

BufferedReader类是Java中读取文本文件的重要类之一。它提供了逐行读取文本文件的方法(readLine()),因此我们可以用它来逐行读取大型文本文件。

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class ReadTextFileExample {

    public static void main(String[] args) {

        String filePath = "D:\\example.txt";

        try (BufferedReader br = new BufferedReader(new FileReader(filePath))) {

            String line;
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

上面的代码通过BufferedReader和FileReader实现了逐行读取文本文件的功能。首先,我们在main()方法中指定需要读取的文本文件路径。其中,存储了待读取的文本文件路径 "D:\example.txt"。然后,我们创建BufferedReader实例,将FileReader实例传递给它,以实现对指定文本文件的读取。最后,在while循环中,我们通过调用readLine()方法逐行读取文本文件,并将每行文本文件内容打印到控制台。

2. 利用Java中的Scanner类逐行读取文本文件

除了使用BufferedReader类,我们还可以使用Java中的Scanner类逐行读取文本文件。Scanner类提供了nextLine()方法,可以读取下一行文本。同样的,利用它可以实现逐行读取大型文本文件的功能。

import java.io.File;
import java.io.IOException;
import java.util.Scanner;

public class ReadTextFileExample {

    public static void main(String[] args) {

        String filePath = "D:\\example.txt";
        
        try (Scanner scanner = new Scanner(new File(filePath))) {

            while (scanner.hasNextLine()) {
                String line = scanner.nextLine();
                System.out.println(line);
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

上面的代码利用Scanner类实现了逐行读取文本文件的功能。虽然代码行数比前者少,但是在处理大型文本文件时速度可能会慢一些。上面的代码通过Scanner和File实现了逐行读取文本文件的功能。在while循环中,我们通过调用nextLine()方法逐行读取文本文件,并将每行文本文件内容打印到控制台。

3. 使用Nio类库逐行读取文本文件

Java Nio类库提供了更高效的处理大型文本文件方法。在这种情况下,我们可以使用Nio类库的FileChannel和ByteBuffer类实现逐行读取文本文件功能。

import java.nio.ByteBuffer;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;

public class ReadTextFileExample {

    public static void main(String[] args) {

        String filePath = "D:\\example.txt";
        Path path = Paths.get(filePath);

        try {

            List<String> lines = Files.readAllLines(path, Charset.defaultCharset());

            for (String line : lines) {
                System.out.println(line);
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

上面的代码利用FileChannel和ByteBuffer实现了逐行读取文本文件的功能。代码行数相对前两种方法可能要少一些,并且处理大型文本文件时速度还相对较快。在这种情况下,我们先将文本文件读入ByteBuffer,将其转换为字符串,并将字符串分为行。

4. 总结

这篇文章介绍了两种基于BufferedReader和Scanner类的Java程序以及一种基于Java Nio类库的Java程序来逐行读取大型文本文件。使用这些程序,我们可以轻松地处理大型文本文件,而不会出现内存不足的问题。我们建议根据需要选择适当的程序。