显示文本文件的第一行和最后一行?

时间:2011-04-10 18:59:58

标签: java string text-files tokenize filereader

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

  • California,West,1981,115,2 25.99
  • 纽约,东,1991,120,19.95

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

我正在使用带有StringTokenizer的FileReader和FileBuffer。有没有办法只调用第一行的第一个标记和最后一行的第一个标记?谢谢你的帮助!

5 个答案:

答案 0 :(得分:3)

获取你可以做的行的第一个标记

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

获取最后一行我将迭代整个文件并将其存储在List中并获取最后一个元素,如:

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

答案 1 :(得分:1)

提供的答案应该适用于大多数(绝大多数)情况。但对于真正庞大的输入文件,使用RandomAccessFile(RAF)采用不同的方法可能是有意义的。

使用RAF,读取第一个字节,直到命中换行符号(第一行),然后从RAF末尾向后搜索以找到最后一个新行,并从那里读取直到结束(对于最后一行)。

如果线条是固定列宽(FCW),则更容易,但此数据为CSV。对于FCW,您可以计算,知道文件大小和线宽(长度),最后一行将开始,并直接寻找到那一点。

答案 2 :(得分: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
          }
    }

答案 3 :(得分: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);
    }
}

答案 4 :(得分:0)

这是一个非常古老的问题,但现在我们有一个简单的方法来做到这一点,我没有找到任何例子。我给出一个新的答案: 我使用的是 Java 11,但可能在 Java 8 中可用,必须检查。

Long lines = Files.lines(Paths.get(file)).count();
String first = Files.lines(Paths.get(file)).findFirst().get();
String last = Files.lines(Paths.get(file)).skip(lines - 1).findFirst().get();
相关问题