BufferedReader | 无法灵活操作文件指针
在Java和Spring/Spring Boot中,没有专门的工具类可以直接获取文件的总行数。但是,你可以通过Java的BufferedReader类来实现这个功能。
以下是一个简单的方法,用于计算文件的总行数,同时在读取完成后不会改变文件指针。
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class FileUtils {
public static int countFileLines(String filePath) {
int lineCount = 0;
File file = new File(filePath);
try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
while (reader.readLine() != null) {
lineCount++;
}
} catch (IOException e) {
e.printStackTrace();
}
return lineCount;
}
public static void main(String[] args) {
String filePath = "your_file_path_here";
System.out.println("Total lines: " + countFileLines(filePath));
}
}
这个方法首先创建一个File对象,然后用FileReader和BufferedReader读取文件。每次读取一行时,行数计数器会递增。当所有行读完后,这个方法会返回总行数。请注意,使用try-with-resources语句可以确保在读取完成后关闭文件资源,这样文件指针也不会被改变。
reader.readLine() 也会改变文件指针呀…
文件指针
文件指针是一个与文件输入/输出操作相关的概念,它表示在文件中当前读取或写入操作的位置。当你打开一个文件进行读取或写入时,文件指针会被自动创建。对于文本文件,文件指针通常表示字符的位置,而对于二进制文件,文件指针表示字节的位置。
在读取或写入文件时,文件指针会根据操作的内容逐步移动。例如,当你读取一个字符或一个字节时,文件指针会向前移动一个位置。同样地,当你写入一个字符或一个字节时,文件指针也会向前移动一个位置。这使得你可以顺序地访问文件中的内容。
在Java中,有一些类可以让你更灵活地操作文件指针,如RandomAccessFile。使用这些类,你可以在文件中任意移动文件指针,实现随机访问。以下是一些常用的文件指针操作方法:
getFilePointer()
: 获取当前文件指针的位置。seek(long pos)
: 将文件指针移动到指定的位置。skipBytes(int n)
: 向前跳过指定数量的字节。
以下是一个Java的RandomAccessFile示例,展示了如何使用文件指针进行操作:
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
public class FilePointerExample {
public static void main(String[] args) {
File file = new File("your_file_path_here");
try (RandomAccessFile randomAccessFile = new RandomAccessFile(file, "r")) {
// 获取文件指针的初始位置
long initialPosition = randomAccessFile.getFilePointer();
System.out.println("Initial position: " + initialPosition);
// 读取文件的第一个字节
int firstByte = randomAccessFile.read();
System.out.println("First byte: " + firstByte);
// 查看文件指针位置
long currentPosition = randomAccessFile.getFilePointer();
System.out.println("Current position: " + currentPosition);
// 将文件指针移动到文件开头
randomAccessFile.seek(0);
// 再次查看文件指针位置
currentPosition = randomAccessFile.getFilePointer();
System.out.println("Current position after seek: " + currentPosition);
} catch (IOException e) {
e.printStackTrace();
}
}
}
这个示例首先创建一个RandomAccessFile对象以只读模式打开文件。接着,我们获取并输出文件指针的初始位置。然后,我们读取文件的第一个字节,并输出文件指针的当前位置。最后,我们使用seek()
方法将文件指针移回文件的开头,并再次输出文件指针的位置。
RandomAccessFile | 文件指针操作还得是你
首先,记录文件指针的初始位置,然后将文件指针归零。计算总行数后,将文件指针重新设置为初始位置。以下是一个实现这个功能的示例:
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
public class FileUtils {
public static int countFileLines(String filePath) {
int lineCount = 0;
File file = new File(filePath);
try (RandomAccessFile randomAccessFile = new RandomAccessFile(file, "r")) {
// 记录文件指针的初始位置
long initialPosition = randomAccessFile.getFilePointer();
// 将文件指针归零
randomAccessFile.seek(0);
// 计算文件总行数
String line;
while ((line = randomAccessFile.readLine()) != null) {
lineCount++;
}
// 将文件指针重新设置为初始位置
randomAccessFile.seek(initialPosition);
} catch (IOException e) {
e.printStackTrace();
}
return lineCount;
}
public static void main(String[] args) {
String filePath = "your_file_path_here";
System.out.println("Total lines: " + countFileLines(filePath));
}
}
这个示例中,我们首先记录文件指针的初始位置,然后将文件指针归零。接下来,我们使用readLine()
方法逐行读取文件并计数。读取完成后,我们使用seek()
方法将文件指针重新设置为初始位置。这样,您可以在不改变文件指针的情况下计算文件的总行数。