首页 > 解决方案 > 从文本文件实例化一个类

问题描述

我有一个包含姓名、电话号码和员工 ID 的文本文件。

例子:

Chris Cotton
5555555555
CCOTTON

Joshua Trammell
5555555555
JTRAMMELL

我有一个名为 Employee 的类,其构造函数采用姓名、电话号码和 ID。

如何使用该文本文件为我的文本文件中的每条记录实例化员工类,使用员工 ID 作为对象名称?

package com.evolution.model;

public class Employee {
    private String name;
    private int phoneNumber;
    private String employeeId;

    public Employee(String name, int phoneNumber, String employeeId) {
        this.name = name;
        this.phoneNumber = phoneNumber;
        this.employeeId = employeeId;
    }

标签: javafile-ioinstantiation

解决方案


您可以逐行读取文件,并且可以在一个数组中保持三个连续的行,当您捕获三行时,您可以使用它的构造函数来构造员工对象,就像我在我的 main 方法中展示的那样。

这是您可以使用的示例代码。为了安全起见,我已将 phoneNumber 的数据类型从 更改为intString因为电话号码可能只包含数字,也可能不包含数字。但是,如果您确定您的电话号码将仅包含不以零开头的数字,您可以编写Integer.parseInt(fileLines.get(i + 1))而不是仅fileLines.get(i + 1)在 for 循环中的构造函数创建调用中编写。

这是相同的示例代码,

public class Employee {
    private String name;
    private String phoneNumber;
    private String employeeId;

    public Employee(String name, String phoneNumber, String employeeId) {
        this.name = name;
        this.phoneNumber = phoneNumber;
        this.employeeId = employeeId;
    }

    public String toString() {
        return String.format("name: %s, phoneNumber: %s, employeeId: %s",
                new Object[] { name, phoneNumber, employeeId });
    }

    public static void main(String args[]) throws Exception {
        try (BufferedReader reader = new BufferedReader(new FileReader("emp.txt"));) {
            String line = null;

            int counter = 0;
            String[] lineObject = new String[3];
            while ((line = reader.readLine()) != null) {
                line = line.trim();
                if (line.length() == 0) {
                    continue;
                }
                lineObject[counter++] = line;
                if (counter == 3) {
                    counter = 0;
                    Employee employee = new Employee(lineObject[0], lineObject[1], lineObject[2]);
                    System.out.println(employee);
                    // employee.dowhatever();
                }
            }
        }
    }
}

执行时,该程序打印以下输出,

name: Chris Cotton, phoneNumber: 5555555555, employeeId: CCOTTON
name: Joshua Trammell, phoneNumber: 5555555555, employeeId: JTRAMMELL

推荐阅读