java readline()读取文件后如何重新定位到第一行

文件要使用BufferedReader的readline函数但是在进行行数和列数的技术时,已经读过一次,如何在后边的使用readline时重新设置从第1行开始读呢?去大神指导

public class Test {

/**

  • @param args
  • @throws IOException
    */
    public static void main(String[] args) throws IOException {
    // TODO Auto-generated method stub

    FileReader file = new FileReader("F:/a/data.txt");
    

    BufferedReader br = new BufferedReader(file);

//判断文件有多啊少行
String strline = null;
int linenum = 0;//文件行数
int charlen = 0;//文件列数
while((strline = br.readLine())!=null){
linenum++;
charlen = strline.length();
}
System.out.println(linenum);

String[] str1 = new String[linenum] ;
String[] str2 = new String[charlen];
int i=0;
int total = 0;

for(i=0;i<str1.length;i++)
{
str1[i] = br.readLine();

str2=str1[i].split(",");
int num =Integer.parseInt(str2[1]);
total =total+num;
}System.out.println(total);

br.close();
file.close();
}

}

看你的代码,你没必要重新定位到第一行,这也是没人有兴趣回答你的原因。
既然都读完一遍了,为啥不把文件内容先保存起来呢,放在数组里或者集合里都可以啊,还提高了效率。

如果你实在不在乎效率,或者只是读了文件的头一部分,重新定位的方法如下:
读之前 mark 一下,把一个标志放在文件初始位置, 它的参数值readAheadLimit 为你mark的地方到你已经读到了,
然后想重新定位的地方的总字节数。比如你readLine一下就想回到第一行,那么readAheadLimit就是readLine那一行的字节数。

然后 reset()方法就可以实现了。

不过让人蛋疼的是: 你没readLine之前,你不知道那一行的字节数,mark(int readAheadLimit)参数就不知道写多少,
而你readLine之后,你的mark标志就无法放在文件头。
所以,参数只就给个大概的数, 慎用大数。