1

我有一个用于导航文本文件的 GUI 程序。没什么太复杂的,只是能够浏览文件并向其中添加新信息。但是,我也希望能够识别文本文件中的第一行以及最后一行。基本上,如果我有一个如下所示的文本文件:

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

我希望,当一个按钮被按下时,首先出现 - 文本加利福尼亚出现,识别文本中的第一行。但我只想显示加利福尼亚,而不是第一行的其余信息。我希望以相同的风格对最后一行执行此操作。

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

4

5 回答 5

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
于 2011-04-10T19:15:27.527 回答
1

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

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

如果行是固定列宽 (FCW),则更容易,但此数据是 CSV。对于 FCW,您可以根据文件大小和行宽(长度)计算最后一行的开始位置,然后直接查找该点。

于 2011-04-10T22:08:08.563 回答
1

这是一个非常古老的问题,但现在我们有一个简单的方法可以做到这一点,我没有找到任何例子。我给出了一个新答案:我正在使用 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();
于 2021-06-27T17:19:09.657 回答
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
          }
    }
于 2011-04-10T19:19:00.237 回答
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);
    }
}
于 2011-04-10T20:50:29.483 回答