了解 DataReader 嵌套类

DataReader 类从输入文件读取数据,然后为每组风数据创建 SimData 对象。

每个新 SimData 对象要添加到 ArrayList 集中。
描述 代码
  • 该类的第一行中已声明成员变量。SimData 对象填充变量。
  • 未定义任一构造函数,所以系统在创建 DataReader 时提供一个默认的构造函数。
public class DataReader {

  private List<SimData> m_flows =
    new ArrayList<SimData>();
  • 指定执行任务的方法。将输入文件的路径作为该方法的自变量进行传递。try-catch 结构用于处理无法找到文件时出现的任何异常。如出现异常,该类会打开 MessageDialog 显示错误字符串。
public void readInput(String fileToRead) {
 
  try {
 
    FileReader fr =
      new FileReader(fileToRead);
    BufferedReader br =
      new BufferedReader(fr);
    Scanner sc =
      new Scanner(br);
 

  } catch (Exception e) {
 
    JOptionPane.showMessageDialog(
      null, e.toString()
    );
  }
}

JOptionPane 语句已包含在内,有助于调试;如测试及调试中所述。

描述 代码
  • 查看try-catch 括号中的 while 循环。Scanner 类允许读取其遇到文件的各个值,并逐行读取文件。默认情况下,该 scanner 识别空白区,如制表符、空格和回车,作为值间的间隔。您可使用此功能来读取行中的各个值,并将其传递到 SimData 对象。在创建 SimData 对象并存储于集合后,对于文件的下一行,重复上述过程。“当文件有另一行”循环重复过程。还可以采用 if 语句的形式使用额外检查。如果行包含一个数字则为只读,如果不是这样则不是。
while (sc.hasNextLine()) {
  sc.nextLine();
  if (sc.hasNextDouble()) {
    double angDeg =
      sc.nextDouble();

    double initVelWnd =
      sc.nextDouble();
 
    SimData sd =
      new SimData(
        angDeg, , initVelWnd
      );
 
    m_flows.add(sd);
  }
}
  • 最后,getter 方法允许从 DataReaderclass 外访问 SimData 对象集。
public List<SimData> getFlowDetails() {
  return m_flows;
}

继续进行下个部分,以检查 DataWriter 类。