2014-11-04 51 views
0

我有了格式化像这样值的列表的文本文件:读取特定行,然后outputing java的

FirstName LastName 
Labs 
10, 25, 25, 15, 30, 50, 40, 40, 40, 25, 50 
10, 25, 25, 15, 29, 49, 39, 39, 39, 25, 49 
Homework 
100, 100, 100, 100, 100, 100, 100, 100 
100, 100, 100, 100, 100, 100, 100, 93 
Quizzes 
10, 10, 15, 10, 9, 10, 15 
8, 10, 11, 9, 7, 7, 11 
Exams 
100, 100, 100, 100, 100 
96, 78, 88, 62, 92 

有没有一种方法,我可以采取特定行,说行在考试中读取所有100个数据,并将该行存储到一维数组中?

+0

“考试”下有多行。你为什么要读第一行,而不是下一行? – hfontanez 2014-11-04 22:45:51

+0

您会将第一行读入一个变量,然后将第二行读入另一个变量,然后查找平均值。 – javaNoob 2014-11-04 22:48:46

回答

0

您必须仔细阅读文件,直到您可以读取文件中的检查点,然后准备将值插入到阵列中。 因此,您需要阅读文件,开始搜索您的考试关键字,然后在下一行开始读取值,直到达到您想要的数量或文件/行的结尾。

0

两种方式:

  1. 您可以使用Java的RandomAccessFile类。
  2. 您可以使用正则表达式来查找您需要的部分。

,我会在以后编辑这个答案提供两个例子(如果别人不早一点这样做)

UPDATE:使用RandomAccessFile的(这是在匆忙做有可能是一个更好方式)

public static void main(String[] args) 
{ 
    RandomAccessFile file = null; 
    try 
    { 
     file = new RandomAccessFile("grades.txt", "r"); // read-only file 
     while(!file.readLine().startsWith("Exams")) 
     { 
      file.seek(file.getFilePointer()); 
     } 
     // Get the numbers and add them 
    } 
    catch (IOException e) 
    { 
     e.printStackTrace(); 
    } 
    finally 
    { 
     try 
     { 
      file.close(); 
     } 
     catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 
    } 
} 

while()循环正在将指针移动到“检查”后面的下一行。您可以跟踪要读取的剩余字节数,并创建一个从当前位置读取文件的字节数组。我不会读到最后,因为“考试”可能不是最后一个记录。要使其与文件的所有部分(即作业)一起工作,您必须更聪明一点,以免最终获得比您需要的更多数据。但这是RandomAccessFile背后的想法。当您必须在“考试”下输入新成绩时,此课程也很有用。在这种情况下,文件权限必须设置为“rw”。

如果您可以保证文件的结构永远不会改变,RandomAccessFile非常棒,因为您可以快速转到文件的不同部分,读取和/或写入信息,然后继续。您可以将其视为非常低级别的数据库。

相关问题