使用JFileChooser打开txt文件并填充ArrayList

时间:2016-05-03 04:17:13

标签: java

我有一个包含ID,名称,地址和状态实例变量的Person类

  • ID没有setter(mutator)方法
  • 名称,地址和状态实例变量都有setter和getter方法 - 要读入的txt文件是逗号分隔的

我想使用JFileChooser打开一个txt文件,然后通过读入来填充Person类类型ArrayList。 我得到堆叠以将读入ID设置为Person对象 这是读入和演绎arraylist的方法

public static ArrayList<Person> load(String fileName) throws IOException {
    ArrayList<person> lines = null;
    BufferedReader reader;
    try {
        JFileChooser chooser = new JFileChooser();
        chooser.setDialogTitle("Load which file?");
        int result = chooser.showOpenDialog(null);
        if (result == JFileChooser.APPROVE_OPTION) {
            File file = chooser.getSelectedFile();
            if (file != null) {
                fileName = file.getCanonicalPath();
                reader
                        = new BufferedReader(new FileReader(fileName));
                lines = new ArrayList<>();

                String line = reader.readLine();
                String data[];
                while ((line = reader.readLine()) != null) {
                    data = line.split(",");
                    Person s = new Person();


                     s.setName(data[0]);
                     s.setAddress(data[1]);
                    s.setState(data[2]);

                    //I got stack how to set ID bcs it has no set method

                    s.getAddress();                                   
                    s.getName();
                    s.getState();

                    lines.addAll(Arrays.asList(s));
                }
                reader.close();
                return lines;
            }
        }

    } catch (FileNotFoundException exp) {
        exp.printStackTrace();
    } catch (IOException exp) {
        exp.printStackTrace();
    }
    return lines;
}

}

2 个答案:

答案 0 :(得分:1)

如果您决定在分配后不想更改ID,那么您可以重载类构造函数,如下所示

public Person(int id){
    this.id = id;
}

然后在你的方法里面做

data = line.split(",");
Person s = new Person(whatever_if_you_wanana_set);

答案 1 :(得分:0)

如果没有任何setter或构造函数需要ID,则无法设置ID。此外,你为什么要使用

lines.addAll(Arrays.asList(s));

由于sPerson的对象,您只需调用lines.add(s);即可将人物对象添加到列表中。