IM-joke 2015-03-26 01:04 采纳率: 0%
浏览 9168

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();
}

}

  • 写回答

1条回答 默认 最新

  • Wilfur916 2016-12-10 08:27
    关注

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

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

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

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

    评论

报告相同问题?

悬赏问题

  • ¥15 matlab实现基于主成分变换的图像融合。
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊