【问题标题】:read lines in txt file [java] [duplicate]读取txt文件中的行[java] [重复]
【发布时间】:2010-11-30 15:13:53
【问题描述】:

我会尽量讲清楚,但如果我的问题不完美,请原谅我。 我有一个包含多行数据的 txt 文件。示例:

123 拉尔夫·博斯 20000 200 1 2

256 埃德·肖恩 30000 100 2 4

...

我需要按顺序读取每一行并将其传递回单独类中的方法进行处理。我知道如何使用 StringTokenizer 将每一行分解为元素。

但是,我不确定如何一次读取一行,将元素传回另一个类,然后在处理完成后读取 NEXT 行。我的班级之间的方法合作工作正常(经过测试),但我如何一次阅读一行?

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

谢谢

爸爸

编辑

粗略设置:

A 类

end_of_file = f1.readRecord(emp);

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

B 类

public boolean readRecord(Employee pers) throws IOException {

        boolean eof = false ;

        String line = in.readLine() ; 

                ???

                }

文件名永远不会被传递

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

棘手...

【问题讨论】:

    标签: java lines


    【解决方案1】:

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

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

    【讨论】:

    • 嗨 Micheal,我添加了一些代码来大致说明合作。我认为我不能在我的设置中使用文件名?
    • @Baba yourFile 在这里实际上是一个File 实例,而不是文件名,但这并不重要。我完全不明白你发布的代码。此代码将从文件中读取每一行并将整行传递给YourClass.processLine;那是你要找的吗?除此之外还需要做什么?
    • 我的问题似乎是 end_of_file 布尔值。在该布尔值未设置为 true 之前,它不会进入处理过程 (printPay())。但是,在我读完每一行之前我不能这样做,所以我对如何输入处理 IF 语句感到困惑。我想我需要修改我的 readRecord 方法。
    【解决方案2】:
    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*")

    希望有效果

    【讨论】:

    • 这取决于你,但是对于这种情况的常见习惯用法是while((line = br.readLine()) != null),而不是需要while(true)break out
    • @Michael:编码时我遵循你提到的标准......但为了清楚起见,我将其分解为额外的步骤:)
    猜你喜欢
    • 1970-01-01
    • 2017-08-29
    • 1970-01-01
    • 2012-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-03
    相关资源
    最近更新 更多