读入文本文件传递给Java对象数组

时间:2015-09-28 14:49:10

标签: java

我正在创建像Mint这样的程序。

现在,我从文本文件中获取信息,将其拆分为空格,然后将其传递给另一个类的构造函数以创建对象。我在完成这项工作时遇到了一些麻烦。

我不知道如何从文本文件中获取我真正需要的信息以及其中包含的所有额外内容。

我需要有一个有100个斑点的对象数组。

是构造函数
public Expense (int cN, String desc, SimpleDateFormat dt, double amt, boolean repeat)

该文件如下:

(0,"Cell Phone Plan", new SimpleDateFormat("08/15/2015"), 85.22, true);
(0,"Car Insurance", new SimpleDateFormat("08/05/2015"), 45.22, true);
(0,"Office Depot - filing cabinet", new SimpleDateFormat("08/31/2015"), 185.22, false);
(0,"Gateway - oil change", new SimpleDateFormat("08/29/2015"), 35.42, false);

以下是我的主要代码:

Expense expense[]  = new Expense[100];
    Expense e = new Expense();
    int catNum;
    String name;
    SimpleDateFormat date = new SimpleDateFormat("01/01/2015");
    double price;
    boolean monthly; 

    try {
        File file = new File("expenses.txt");
        Scanner scanner = new Scanner(file);

        while (scanner.hasNextLine()) {                
            String line = scanner.nextLine();
            String array[] = line.split(",");

            expenses[i] = new Expense(catNum, name, date, price, monthly);


        }
        scanner.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }

1 个答案:

答案 0 :(得分:4)

一步一步:

//(0,"Cell Phone Plan", new SimpleDateFormat("08/15/2015"), 85.22, true);
String array[] = line.split(",");

将生成此数组

[0] (0
[1] "Cell Phone Plan"
[2] new SimpleDateFormat("08/15/2015")
[3] 85.22
[4] true);

所以

expenses[i] = new Expense(catNum, name, date, price, monthly);

不工作,因为它几乎每个参数都需要另外一个数据:

为了解决这个问题:

  • 分割线
  • 时,您必须忽略();
  • 请注意给定字符串中的",您必须使用此字符或忽略它们
  • 您将无法使用:new SimpleDateFormat("08/15/2015")您必须自己创建对象
  • 这不是正确的日期格式“08/15/2015”!!!!

解决方案:如果您要创建要解析的文件,我建议将其格式更改为:

//(0,"Cell Phone Plan", new SimpleDateFormat("08/15/2015"), 85.22, true);
0,Cell Phone Plan,MM/dd/yyyy,85.22,true

然后:

String array[] = line.split(",");

将产生

[0] 0
[1] Cell Phone Plan
[2] MM/dd/yyyy
[3] 85.22
[4] true

然后您可以使用以下命令解析非字符串值:

更新

Check here a working demo that you must adapt to make it work

<强>输出:

public Expense (0, Cell Phone Plan, 08/15/2015, 85.22, false  );
public Expense (0, Car Insurance, 08/05/2015, 45.22, false  );