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 乘性高斯噪声在深度学习网络中的应用
  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥30 python代码,帮调试,帮帮忙吧