JavaNIO实现按行读取文件操作

简介: 在Java编程中,文件操作常常是必不可少的步骤。在对文件进行操作时,按行读取文件是一个常见需求。Java提供了多种方法实现按行读取文件,其中一种方法是使用JavaNIO。

JavaNIO实现按行读取文件操作

JavaNIO实现按行读取文件操作

JavaNIO是Java New IO的简称,是Java SE 1.4版本引入的一种新的IO API。相比传统的IO API,JavaNIO提供了更加强大、灵活和高效的IO操作方式。在使用JavaNIO实现按行读取文件操作时,可以使用BufferedReader和CharBuffer两个类。

BufferedReader是Java IO中的一个类,可以用来读取字符流,也可以用来读取字节流。在JavaNIO中,BufferedReader可以用来创建一个可读取的通道。通过BufferedReader获取到通道后,再使用CharBuffer类来按行读取文件中的内容。

CharBuffer是JavaNIO中的一个类,它是一个字符缓冲区。在使用CharBuffer时,需要先将文件中的内容读取到CharBuffer中,然后再按行读取CharBuffer中的内容。

下面是使用JavaNIO实现按行读取文件操作的示例代码:

import java.io.*;

import java.nio.*;

import java.nio.channels.*;

public class ReadFileByLineWithJavaNIO {

private static final int BUFFER_SIZE = 1024;

public static void main(String[] args) {

String filePath = \file.txt\ try {

FileInputStream fileInputStream = new FileInputStream(filePath);

FileChannel fileChannel = fileInputStream.getChannel();

ByteBuffer byteBuffer = ByteBuffer.allocate(BUFFER_SIZE);

while (fileChannel.read(byteBuffer) > 0) {

byteBuffer.flip();

CharBuffer charBuffer = Charset.defaultCharset().decode(byteBuffer);

String[] lines = charBuffer.toString().split(\r?\\n\ for (String line : lines) {

System.out.println(line);

}

byteBuffer.clear();

}

fileInputStream.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

在以上示例代码中,首先定义了一个BUFFER_SIZE常量,这个常量表示读取文件时缓冲区的大小,一般设置为1024即可。

然后通过FileInputStream获取文件输入流,再通过getChannel方法获取文件通道。接着创建ByteBuffer对象用于存储文件内容。

在while循环中,使用fileChannel.read方法读取文件内容到ByteBuffer中。当读取到内容时,执行byteBuffer.flip()方法以便能够从ByteBuffer中读取内容。之后使用Charset.defaultCharset().decode方法将ByteBuffer中的内容转换为CharBuffer。

然后使用CharBuffer.toString().split方法将CharBuffer中的内容按行分割,然后遍历分割后得到的字符串数组,输出每一行文件内容。最后执行byteBuffer.clear()方法以便可以继续读取文件中的内容。

可以看到,使用JavaNIO实现按行读取文件操作非常简单。通过以上方法,可以在读取文件时节省空间和时间,提高效率。
本文部分代码转自:https://www.wodianping.com/java/2023-08/251792.html

目录
相关文章
|
1月前
从文件中读取一行
从文件中读取一行。
27 5
|
1月前
将字符串写入文件
将字符串写入文件。
25 2
|
5月前
|
Java C++ Python
使用getline()从文件中读取一行字符串
C++ 中的 `getline()` 函数用于从文件流中读取整行文本。它可以从 `fstream` 和 `ifstream` 对象中调用。有两种语法形式:一种读取到 `\n` 或达到指定缓冲区大小,另一种允许指定自定义分隔符。如果文件流中的字符数量超过缓冲区大小,可能导致读取失败。示例代码展示了如何使用 `getline()` 读取单行和多行文本。
|
7月前
|
Java C++ Python
C++ 使用getline()从文件中读取一行字符串
`getline()` 是 C++ 中 `istream` 类的一个方法,被 `fstream` 和 `ifstream` 继承,用于从文件中读取一行字符串。它有两种语法:一种是从文件读取 `bufSize-1` 个字符到 `buf` 直到 `\n`,另一种是读到指定分隔符 `delim`。如果文件中的字符数量超过 `bufSize`,会导致读取失败。示例代码展示了如何使用 `getline()` 读取和打印文件内容。通过循环调用 `getline()`,可以连续读取文件的多行数据。
122 0
|
7月前
|
C++
C++程序对数据文件的操作与文件流
C++程序对数据文件的操作与文件流
59 0
C++读取单个字符操作
get() 是 istream 类的成员函数,它有多种重载形式,不过本文只介绍最简单最常用的一种: int get(); 此函数从输入流中读入一个字符,返回值就是该字符的 ASCII 码。 如果碰到输入的末尾,则返回值为 EOF。EOF 是 End of File 的缩写。istream 类中从输入流(包括文件)中读取数据的成员函数,在把输入数据都读取完后再进行读取,就会返回 EOF。 EOF 是在 iostream 类中定义的一个整型常量,值为 -1。get() 函数不会跳过空格、制表符、回车等特殊字符,所有的字符都能被读入。例如下面的程序: #include <iostr
|
Java C++ Python
C++ 使用getline():从文件中读取一行字符串
getline() 方法从 cin 输入流缓冲区中读取一行字符串。在此基础上,getline() 方法还适用于读取指定文件中的一行数据,本节就给大家做详细的讲解。 我们知道,getline() 方法定义在 istream 类中,而 fstream 和 ifstream 类继承自 istream 类,因此 fstream 和 ifstream 的类对象可以调用 getline() 成员方法。 当文件流对象调用 getline() 方法时,该方法的功能就变成了从指定文件中读取一行字符串。该方法有以下 2 种语法格式: istream & getline(char* buf, int bufS
258 0
|
7月前
|
C++ iOS开发
61对数据文件的操作与文件流
61对数据文件的操作与文件流
38 0
|
XML C# 数据格式
C#读取写入文件的三种方式
最近对文件的操作比较频繁。这里记录一下常用的几种文件读写的方式。 我这里使用窗体来做测试,例子在文末,可下载。
93 0
|
Shell
从文件中删除重复行
从文件中删除重复行
88 1