java/spring 获取文件总行数的工具? 有没有工具类可以直接获取呀? 而且能直接获取,不会改变读文件的指针

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。使用这些类,你可以在文件中任意移动文件指针,实现随机访问。以下是一些常用的文件指针操作方法:

  1. getFilePointer(): 获取当前文件指针的位置。
  2. seek(long pos): 将文件指针移动到指定的位置。
  3. 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()方法将文件指针重新设置为初始位置。这样,您可以在不改变文件指针的情况下计算文件的总行数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值