2011-04-10 139 views
1

我有一个GUI程序,我用它来导航文本文件。这并不复杂,只是浏览文件并向其添加新信息的功能。不过,我也希望能够识别文本文件中的第一行以及最后一行。基本上,如果我有一个文本文件,它看起来像这样:显示文本文件的第一行和最后一行?

  • 加利福尼亚州,西,1981,115,25.99
  • 纽约,东,1991年,120%,19.95

我想,当一个按钮被按下时,首先 - 加利福尼亚文本出现,识别文本中的第一行。但我只想要加利福尼亚州展示,而不是第一行的其他信息。我希望以相同的风格为最后一行做到这一点。

我用的FileReader和FileBuffer与StringTokenizer的。有没有办法只调用第一行的第一个标记和最后一行的第一个标记?谢谢您的帮助!

+0

是每一个文本文件中相同的数据 – Dotnet 2011-04-10 19:04:31

+0

这里只有一个文本文件,但每一行是在相同的格式。像上面一样,每行有5条信息以逗号分隔。我想打电话给第一个信息(即加州,纽约)。 – rjdelight 2011-04-10 19:09:17

回答

3

让行的第一个记号,你可以做

String line = "California, West, 1981, 115, 25.99" 
String firstToken = line.split(",")[0] 

得到lastLine所我会遍历整个文件,并将其存储在列表中,拿到最后一个元素,是这样的:

String line =""; 
List<String> list = new ArrayList<String>(); 
      while((line = fileReader.readLine())!= null){ 
       list.add(line) 
     } 
list.get(0) // first line 
list.get(list.size()-1) // last line 
+0

有没有办法从文本文件中读取它?因为最后一行总是会发生变化,这取决于添加到文件中的内容。 – rjdelight 2011-04-10 19:48:53

+0

现在我更仔细地阅读@ harshit的例子,它似乎涵盖了原始需求的每个部分。 *你真的尝试使用代码吗?* – 2011-04-10 23:52:18

0

的样本如何使用流阅读

找出所需的字符串

读取文件

streamreader sr=new streamreader("Your.txt"); 
    while(sr.peek()>=0) 
    { 
    string strLine=sr.readLine(); 
     if(strline.startswith("California")) 
     { 
     //Dispaly it 
     } 
      if(strline.startswith("NewYork")) 
      { 
      //Display it 
      } 
    } 
0

有没有办法从文本文件中读取?

如果介入行不相关,则可以读取第一行并扫描到最后一行,而无需累积集合。

import java.io.BufferedReader; 
import java.io.FileReader; 

/** @see http://stackoverflow.com/questions/5614004 */ 
public class FirstLastTest { 

    private static String first, last, line; 

    public static void main(String[] args) throws Exception { 
     BufferedReader in = new BufferedReader(new FileReader(args[0])); 
     first = in.readLine(); 
     while ((line = in.readLine()) != null) { 
      if (line != null) { 
       last = line; 
      } 
     } 
     System.out.println(first + "\n" + last); 
    } 
} 
+0

由于某种原因,我总是收到一个数组索引超出范围的异常... – rjdelight 2011-04-10 21:42:33

+0

是的,'args [0]'是一个简单测试的命令行参数;在IDE中,只需替换引用的文件名即可。 – trashgod 2011-04-10 21:46:35

+0

Gotcha,但是我将如何显示第一行中的第一个单词? – rjdelight 2011-04-10 22:41:11

1

提供的答案应该在绝大多数情况下都能很好地工作。但对于真正巨大的输入文件,采用不同的方法使用RandomAccessFile(RAF)可能是有意义的。

使用RAF,读取第一个字节,直到遇到新的行字符(对于第一行),然后从RAF末尾向后寻找最后一行,并从那里读取直到结束最后一行)。

它是如果线被固定列宽度(FCW)更容易,但这个数据是CSV。对于FCW,可以计算在最后一行将开始知道文件的大小和线宽度(长度),并直接搜寻到该点。

+0

虽然我只是想获得第一行的第一个字,但到目前为止,我只设法获得了第一行的所有内容。 – rjdelight 2011-04-10 23:02:55

+0

@rjdelight如果您已经想出如何获取所需的行,最好再提出一个关于标记行来获取数据的问题。说过'String.split(“,”)[0]'应该产生任何行的第一部分。 – 2011-04-10 23:35:45

+0

+1关于缩放的好处。 – trashgod 2011-04-10 23:46:45

相关问题