从CSV文件中读取Java并将其信息存储到ArrayList<class>中

6

我是一名Java新手,需要一些帮助。

这是我的主方法:

RegistrationMethods dmv = new RegistrationMethods();
ArrayList<CarOwner> ItState = new ArrayList<CarOwner>();
dmv.processTextToArrayList(ItState);

我有一个名为CarOwner的类,它有firstName, lastName, license, month, year实例变量的getter和setter。

以下是我的processTextToArrayList方法头:

public void processTextToArrayList(ArrayList<CarOwner> inList) throws IOException

这个方法旨在将新的CarOwner对象添加到传入的inList CarOwner集合中。对于csv文件的每一行,都会向inList中添加一个CarOwner对象。

我需要从csv文件中读取并存储到ArrayList中,我的csv文件内容类似于:

Bunny Bugs ACB-123 5 2013

Bunny Honey DEF-456 9 2013

Bunny Lola GHI-789 3 2014

我该如何使用while循环编写此代码?

编辑:

我的CarOwner类是:

public class CarOwner extends Citizen implements CarOwnerInterface, Serializable
{
private String license;
private int month, year;

public CarOwner()
{
    super();
    license = "Not Assigned";
    month = 0;
    year = 0;        
}

public CarOwner(String inFirst, String inLast, String inLicense, int inMonth, int inYear)
{
    super(inFirst, inLast);
    license = inLicense;
    month = inMonth;
    year = inYear;
}

public void setLicense(String inLicense)
{
    license = inLicense;
}

public String getLicense()
{
    return license;
}

public void setMonth(int inMonth)
{
    month = inMonth;
}

public int getMonth()
{
    return month;
}

public void setYear(int inYear)
{
    year = inYear;
}

public int getYear()
{
    return year;
}

public int compareTo(Object o)
{
    if ((o != null ) && (o instanceof CarOwner))
    {
        CarOwner otherOwner = (CarOwner) o;
        if (otherOwner.compareTo(getYear()) > 0)
            return -1;
        else if (otherOwner.compareTo(getYear()) < 0)
            return 1;
        else if (otherOwner.equals(getYear()))
            if (otherOwner.compareTo(getMonth()) > 0)
                return -1;
            else if (otherOwner.compareTo(getMonth()) < 0)
                return 1;
            else if (otherOwner.equals(getMonth()))
                return 0;
    }
    return -1;
}

我的公民类也是:

public class Citizen implements CitizenInterface, Serializable
{
private String firstName, lastName;

public Citizen()
{
    firstName = "No Name";
    lastName = "No Name";
}

public Citizen(String inFirstName, String inLastName)
{
    firstName = inFirstName;
    lastName = inLastName;
}

public void setFirstName(String inFirst)
{
    firstName = inFirst;
}

public String getFirstName()
{
    return firstName;
}

public void setLastName(String inLast)
{
    lastName = inLast;
}

public String getLastName()
{
    return lastName;
}

public String toString()
{
    String str;

    str = firstName + " " + lastName;

    return str;
}

1
请尝试展示CarOwner类,并扩展processTextToArrayList方法。它需要在其中读取文件的内容。请参考https://dev59.com/EUXRa4cB1Zd3GeqPs5Ol。 - rajah9
2个回答

6
您可以使用以下方法并提供要读取的文件路径。这将创建一个Scanner以从传入的文件读取。
它逐行获取每个文本并将新的CarOwner(String,String,String,String,String)对象添加到结果数组中。
P.S. 我不知道您的CarOwner实现,所以我只使用了全部的字符串... 这需要您自己解决哦。
public ArrayList < CarOwner > processTextToCarOwnerList(String filePath) throws IOException {
    ArrayList < CarOwner > result = new ArrayList < CarOwner > ();
    Scanner scan = new Scanner(new File(filePath));
    while (scan.hasNextLine()) {
        String line = scan.nextLine();
        String[] lineArray = line.split(" ");
        result.add(new CarOwner(lineArray[0], lineArray[1], lineArray[2], lineArray[3], lineArray[4]));
        }
        return result;
    }

1
您可以使用类似以下的内容:

您可以使用这样的东西:

ArrayList<CarOwner> owners = new ArrayList<CarOwner>();

BufferedReader br = new BufferedReader(new FileReader(new File("path/to/your/file.csv")));
String line;
while ((line = br.readLine()) != null) {

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

    CarOwner owner = new CarOwner(entires[0], entries[1], entries[2], entries[3]);

    owners.add(owner);
}

你是否有一个真正的CSV文件(所有值都用逗号分隔),还是用空格或类似方式分隔? 如果是这种情况,你需要将逗号替换为空格。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接