读取文本文件中的行 [Java]

3

我会尽可能清晰地表达,但如果我的问题不完美,请谅解。我有一个带有多行数据的txt文件。例如:

123拉尔夫博斯20000 200 1 2

256埃德·莎恩30000 100 2 4

...

我需要逐行读取每一行数据,并将其传递回到另一个类中的方法进行处理。我知道如何使用StringTokenizer将每行拆分成元素。

然而,我不确定如何逐行读取数据,将元素传递回其他类,然后在处理完成后读取下一行。我的类之间的方法协作运行良好(已测试),但如何逐行读取数据呢?

我想创建一个数组,其中每一行都是一个数组元素,但由于行数未知,我无法创建一个数组,因为我不知道它的最终长度。

谢谢

Baba

编辑

粗略设置:

A类

end_of_file = f1.readRecord(emp);

        if(!end_of_file)
        { 
           slip.printPay(slipWrite);
        }

Class B

public boolean readRecord(Employee pers) throws IOException {

        boolean eof = false ;

        String line = in.readLine() ; 

                ???

                }

文件名从未传递

因此,到目前为止,我可以读取第一行,但我认为我需要一种方法来循环遍历这些行,以便在类之间来回读取它们。

有点棘手...

2个回答

4

有很多方法可以一次读取整行文本;Scanner 可能是最简单的:

final Scanner s = new Scanner(yourFile);
while(s.hasNextLine()) {
    final String line = s.nextLine();
    YourClass.processLine(line);
}

嗨,Michael,我已经添加了一些代码,尝试粗略地说明合作。我认为在我的安装中不能使用文件名? - user425727
1
@Baba yourFile 在这里实际上是一个 File 实例,而不是文件名,但这并不重要。然而,我完全不理解你发布的代码。这段代码将从文件中读取每一行,并将整个行传递给 YourClass.processLine;这是你想要的吗?除此之外,它还需要做些什么呢? - Michael Mrozek
我的问题似乎在于 end_of_file 布尔值。只有当该布尔值未设置为 true 时,才会进入处理(printPay())。然而,在读取每行之前,我无法这样做,因此我对如何进入处理 IF 语句感到困惑。我认为我需要重新设计我的 readRecord 方法。 - user425727

3
void readLine(String fileName)
{
   java.io.BufferedReader br = null;
   try
   {
      br = new java.io.BufferedReader(new java.io.FileReader(fileName));
      String line = null;
      while(true)
      {
          line = br.readLine();
          if(line == null)
             break;
          // process your line here
      }
   }catch(Exception e){
   }finally{
     if(br != null)
      {
         try{br.close();}catch(Exception e){}
       }
   }
}

如果您想拆分字符串...请使用字符串类的split方法。如果要根据空格拆分...可以这样做:line.split("\\s*")

希望它能够起作用。


1
由你决定,但在这种情况下常用的习语是 while((line = br.readLine()) != null),而不需要使用 while(true) 并通过 break 跳出。 - Michael Mrozek
@Michael:在编程时,我遵循你提到的标准...但为了清晰起见,我将其分解成了额外的步骤 :) - Favonius

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接