Dlaczego lista wypełnia się nullami ?

0

Witam otóż odczytuje z pliku linie i dziele je po przecinku a nastepnie dodaje do listy. Wydaje się, że wszystko jest ok, ale okazuje się, że lista wypełniona jest nullami.
O co chodzi ?

List<User> users=new ArrayList<>();

       File file = new File("readFile.txt");
       StringBuilder reading = new StringBuilder();
       try {
           Scanner scan = new Scanner(file);
           while (scan.hasNextLine()) {
               String line=scan.nextLine();
               String[] lineArray=line.split(",");


               users.add(new User(lineArray[0],lineArray[1],lineArray[2],lineArray[3]));

           }
       } catch (FileNotFoundException e) {
           System.out.println("Brak pliku.");
       }


       System.out.println(Arrays.toString(users.toArray()));
public class User {

    private String name;
    private String surName;
    private LocalDate dateOFBirth;
    private Long phoneNumber;


    public User(String name, String surName, String s, String nextToken) {
    }

    public User(String name, String surName, LocalDate dateOFBirth) {
        this.name = name;
        this.surName = surName;
        this.dateOFBirth = dateOFBirth;
    }

    public User(String name, String surName, LocalDate dateOFBirth, Long phoneNumber) {
        this.name = name;
        this.surName = surName;
        this.dateOFBirth = dateOFBirth;
        this.phoneNumber = phoneNumber;
    }

    public String getName() {
        return name;
    }

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

    public String getSurName() {
        return surName;
    }

    public void setSurName(String surName) {
        this.surName = surName;
    }

    public LocalDate getDateOFBirth() {
        return dateOFBirth;
    }

    public void setDateOFBirth(LocalDate dateOFBirth) {
        this.dateOFBirth = dateOFBirth;
    }

    public Long getPhoneNumber() {
        return phoneNumber;
    }

    public void setPhoneNumber(Long phoneNumber) {
        this.phoneNumber = phoneNumber;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", surName='" + surName + '\'' +
                ", dateOFBirth=" + dateOFBirth +
                ", phoneNumber=" + phoneNumber +
                '}';
    }
}

0

A wchodzi ci w tego while chociaż? Odpal sobie debuggera i zobacz co sie dzieje

0

odpalałem, while działa dobrze

0

dobra juz wiem, to przez localDate i Long

0
public User(String name, String surName, String s, String nextToken) {
    }

Ergo wszystko jest nullem

0

a jak byście zamienili te Stringi z wejscia na LocalDate i Long ?

1
Belka napisał(a):

A spróbuj to zczytac np. jakimś BufferedReader bufferedReader = new BufferedReader(new FileReader(filePath)); i sprawdź czy zadziała. Tylko pamiętaj o zamknięciu tego readera po wszystkim.

Gosc ma pusty konstruktor po prostu...

0

Generalnie dla wszystkich pól String to działa, teraz musze zamienic Date i numer telefonu na odpowiednie formaty

0

Mam jeszcze pytanko, jaki warunek byście zrobili gdyby np. jedna z linii nie zawierała numeru telefonu i chciałbym tam wstawić null w takim przypadku ?

1

if lineArray.length() < 4

0

muszę ogarnąć przypadek w którym nie będzie ostatniego elementu czyli numeru telefonu, a wtedy phoneNumer i date zamienią się tez indexami. Myślę jak to zrobić...

List<User> users=new ArrayList<>();
        List<User2> user2List=new ArrayList<>();
        user2List.add(new User2("tata"));
        System.out.println(Arrays.toString(user2List.toArray()));

        File file = new File("readFile.txt");
        StringBuilder reading = new StringBuilder();
        try {
            Scanner scan = new Scanner(file);
            while (scan.hasNextLine()) {
                String line=scan.nextLine();
                String[] lineArray=line.split(",");
                DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-d");
                LocalDate date = LocalDate.parse(lineArray[2], formatter);
                Long phoneNumber=Long.parseLong(lineArray[3]);


                users.add(new User(lineArray[0],lineArray[1],date,phoneNumber));

            }
        } catch (FileNotFoundException e) {
            System.out.println("Brak pliku.");
        }

        System.out.println("Liczba użytkowników: "+ users.size());
        System.out.println(Arrays.toString(users.toArray()));
    }

0

Wtedy niesttey wszystko mi się posypie bo i parsowanie sie zmieni

0

Jednak się udało na luzie

if(lineArray.length<4){
                    users.add(new User(lineArray[0],lineArray[1],date,null));
                }
                else {
                    Long phoneNumber=Long.parseLong(lineArray[3]);
                    users.add(new User(lineArray[0],lineArray[1],date,phoneNumber));
                }
0

Może daj se nagłówki do tego pliku i użyj jakiejś biblioteki do wyciagania danych z csv. Takimi ifami po length to troche lipa

0
baant napisał(a):

Może daj se nagłówki do tego pliku i użyj jakiejś biblioteki do wyciagania danych z csv. Takimi ifami po length to troche lipa

Np apache
http://commons.apache.org/proper/commons-csv/user-guide.html

1 użytkowników online, w tym zalogowanych: 0, gości: 1