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