从数据文件读取以填充ArrayList

时间:2013-09-11 23:45:43

标签: java file-io arraylist

我有一个带有抽象类'Orders'的程序,有三个不同的类实现它,当我用硬编码命令测试时,程序中的所有内容都运行正常。

这是抽象类:

public abstract class Order {
protected String location;
protected double price;

public Order(double price, String location){
    this.price = price;
    this.location = location;
}

public abstract double calculateBill();

public String getLocation() {
    return location;
}

public double getPrice() {
    return price;
}

public abstract String printOrder(String format);

}

这是参考的实施类之一

public class NonProfitOrder extends Order {

public NonProfitOrder(double price, String location) {
    super(price, location);
}

public double calculateBill() {
    return getPrice();
}

public String printOrder(String format){
    String Long = "Non-Profit Order" + "\nLocation: " + getLocation() +  "\nTotal Price: " + getPrice();
    String Short = "Non-Profit Order-Location: " + getLocation() + ", " + "Total Price: " + getPrice();
    if (format.equals("Long")){
        return Long;
    }
    else{
        return Short;
    }
}
}

到目前为止,这是我对测试人员所拥有的,我知道这是错误的,非常混乱,但要放轻松。我一直在努力寻找工作,但没有运气。

public static ArrayList<Order> readOrders (String fileName) throws FileNotFoundException{
    String type;
    Scanner s = new Scanner(new File("orders.txt"));
    ArrayList<Order> orders = new ArrayList<Order>();
    while (s.hasNext()){
        type = s.nextLine();
    }
    switch(type) {
        case 1: type = NonProfitOrder();
            break;
        case 2: type = RegularOrder();
            break;
        case 3: type = OverseasOrder();
    return orders;
}

}

我需要读取的数据文件如下所示:

N 1000.0 NY
R 2000.0 CA 0.09
R 500.0 GA 0.07
N 2000.0 WY
O 3000.0 Japan 0.11 20.0
N 555.50 CA
O 3300.0 Ecuador 0.03 30.0
R 600.0 NC 0.06

首先我无法读取文件,我知道我需要一个循环来将数据添加到arrayList,但我不知道如何。在一种方法中读取和循环所有最简单的方法是什么?如果可能的话。

我更新了添加一些我有的switch语句,但是没有用。而不是情况1,2,3,我将需要使用N,O,R的东西来匹配文件 而且我无法修复错误“类型不匹配”。

2 个答案:

答案 0 :(得分:1)

Scanner提供了一种简单的方法来浏览文件。 .next()。hasNext()。nextLine()。hasNextLine()是非常有用的方法。

答案 1 :(得分:0)

您可以使用BufferedReader来执行此操作。

假设您使用的是java7:

    //try with resources
    try(BufferedReader  reader = new BufferedReader(new InputStreamReader(new FileInputStream("orders.txt")))) {
        List<Order> orders = new ArrayList<>();
        String line = null; ;
        while( (line =reader.readLine()) != null){
             String [] array = line.split("\\s+"); // you split the array with whitespace
              orders.add(new NonProfitOrder(array[0],array[1])); // you add to the list ,you have to create a constructor string string or cast for proper type.               
        }           

    } catch (IOException ex) {
        //handle your exception
    }