如何从文件中获取信息并在程序中使用它 java (ArrayList)

how to get information from a file and using it in a program java (ArrayList)

所以我正在做一个项目,从文本文件中获取数据来计算支付和税收等事情。这是我到目前为止所拥有的,不知道从这里去哪里。我什至无法打开数据的文本文件。如有任何帮助,我们将不胜感激!

newdata.txt
id; name; position; hourly rate; hours worked

这是包含输入数据的文本文件^。


输出应该是这样的:

输出:

员工编号:1

员工姓名:ab

位置:c

总工资:400000.00 美元

联邦税:120000.00 美元

净收入:280000.00 美元


输出文件:

1; AB C; $280000.00

...

package payroll;
import java.util.ArrayList;
import java.util.Scanner;
import java.io.File;
import java.io.FileReader;
import java.io.PrintWriter;

public class Employee {

    private int id;
    private String name;
    private double wage;
    private double hoursWorked;


    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getWage() {
        return wage;
    }

    public void setWage(double wage) {
        this.wage = wage;
    }

    public double getHoursWorked() {
        return hoursWorked;
    }

    public void setHoursWorked(double hoursWorked) {
        this.hoursWorked = hoursWorked;
    }



    public String toString() {
        return null;

    }




    public static void main(String[] args) {
        File myFile = new File("newdata.txt");

        System.out.println(myFile);

        Employee employee1 = new Employee();
        employee1.getId();
        employee1.getName();
        employee1.getWage();
        employee1.getHoursWorked();


    }



}

首先您需要从文件中读取文本并用真实数据填写 class。在 java 中有多种方法可以做到这一点。 IE。您可以创建一个 BufferedReadStream 并逐行读取文件。

您需要使用“;”将每一行拆分为多个元素。正如你所描述的。

一些元素将表示字符串值,例如名称,其他元素将表示整数和双精度值。您需要使用 Double.parseDouble(string).

之类的方法将字符串转换为这些值

完成后,您可以计算所需的内容并打印结果。

这是一个实现(可能有较小的错误,还没有编译)。将此添加到 Employee class 并将您的 main() 函数替换为以下函数:

public String position;


public String getPosition(){
    return position;
}

public void setPosition(String position){
    this.position = position;
}

public String toString() {
    return getID() + "; " + getName() + "; " + getPosition() + "; " + getWage() + "; " + getHoursWorked();
}




public static void main(String[] args) {
    Employee employee1 = new Employee();

    java.util.List<String> lines = java.nio.file.Files.readAllLines(Paths.get("newdata.txt"), StandardCharsets.UTF_8);
    for(int i=2; i < lines.size(); i++){
        String[] splittedData = lines.get(i).split("; ");
        employee1.setId(splittedData[0]);
        employee1.setName(splittedData[1]);
        employee1.setPosition(splittedData[2]);
        employee1.setWage(Double.parseDouble(splittedData[3]));
        employee1.setHoursWorked(Double.parseDouble(splittedData[4]));
    }
}

注意:我不打算这样做,因为我不确定您是否需要它,但是如果您在 newdata.txt 中有多行,此实现将覆盖 employee1 的详细信息。您可以在 for 循环之前添加一个 List<Employee> 对象,并在每次迭代中添加新的 Employee 对象。