web-dev-qa-db-fra.com

java lisant un fichier csv et stockant ses informations dans ArrayList <classe>

Je suis un débutant en Java et j'ai besoin d'aide

alors voici ma méthode principale:

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

et j'ai une classe appelée CarOwner et elle a des getters et des setters pour les variables d'instance firstName, lastName, license, month, year.

Et voici mon en-tête de méthode pour la méthode processTextToArrayList:

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

cette méthode est supposée ajouter de nouveaux objets CarOwner à la collection inList CarOwner transmise. Pour chaque ligne du fichier csv, un objet CarOwner est ajouté à inList

Je dois lire un fichier csv dans un répertoire . Mon fichier csv contient quelque chose comme:

Bunny Bugs ACB-123 5 2013

Bunny Honey DEF-456 9 2013

Bunny Lola GHI-789 3 2014

comment est-ce que je code ceci en utilisant la boucle while? 

modifier:

ma classe CarOwner est:

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;
}

}

et ma classe de citoyen est aussi:

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;
}
6
cohsta

Vous pouvez utiliser une méthode comme celle-ci et indiquer le chemin d'accès au fichier à partir duquel vous souhaitez lire. Ceci crée un scanner à lire à partir du fichier transmis.

Il saisit chaque ligne une à la fois et ajoute un nouvel objet CarOwner (String, String, String, String, String) au tableau de résultats.

P.S. Je n'ai aucune idée de votre implémentation de CarOwner, alors je viens d'utiliser toutes les chaînes ... Je vous laisse le soin de comprendre heh.

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;
    }
6
austin wernli

Vous pouvez utiliser quelque chose comme ceci:

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);
}

Avez-vous un vrai fichier csv (toutes les valeurs séparées par,) ou sont-ils séparés par des espaces ou quelque chose comme ça? Dans ce cas, vous devrez remplacer le, par des espaces.

1
Phiwa