2011-03-04 158 views
1

我有一个文本文件,最多可以存储3行(每行有时间##:##)。如何使用Java从文本文件中读取某些行?

如果整个文本文件是空的:做 任务1

否则,如果第一行有一个时间:做 的任务,如果第一和第二线 充满了2

其他次数:做任务3

否则,如果所有三条线都有时报: 任务4

埃尔SE如果所有三条线都有时间,但 的第一线时间及第三线 时间已经超过2小时差距:做 任务5

我想通了前两个。

if ((inputFile.readLine()) == null) {Keypad5 task1 = new Keypad5(); } 

else if ((inputFile.readLine()) !=null) {Keypad6 task2 = new Keypad6();} 

我如何阅读和第二和第三行?如果第二条线有时间12:54,第三条线有3:55,这是2个多小时的差距。我可以减去时间。

回答

3

我建议你在决定做什么之前先阅读所有三行。这会减少第二行和第三行的“复制和粘贴”。

像这样的东西可能是你追求的:

List<String> lines = new ArrayList<String>(); 

Scanner s = new Scanner(new File("filename.txt")); 
while (s.hasNextLine()) 
    lines.add(s.nextLine()); 

switch (lines.size()) { 
case 0: doTask1(); break; 
case 1: doTask2(); break; 
case 2: doTask3(); break; 
case 3: 
    if (gapBetween(lines.get(0), lines.get(2)) < 2) 
     doTask4(); 
    else 
     doTask5(); 
} 
0

随后的readLine()调用的BufferedReader总是读取文件的下一行。如果你想比较不同的行,你必须将它们存储在变量中,然后进行比较。

0

我会这样做,首先将所有的文本行读入一个集合,如果你确信这只是3行,它不会导致内存问题,你不需要做很多错误处理。

ArrayList<String> lines = new ArrayList<String>(); 
String line = null; 
while ((line = inputFile.readLine()) != null){ 
lines.add(line); 
} 

然后你可以做一些if语句,而不会覆盖缓冲区中的前面的行。 (我假设“inputFile”是一个BufferedReader)