K.Dzien K.Dzien - 29 days ago 6
Java Question

Create object from multiple lines in .txt file

My problem:

I have txt file with that structure:

20:00 Norwich Res-Milton K.
2.45
3.30
2.45
20:30 Everton Res-Blackpool
2.24
3.25
2.73


What i want is to read text file, and create objects from data inside. One object that i need is ie.(fields of one object ) :

20:00 Norwich Res-Milton K. (String)
2.45 (double)
3.30 (double)
2.45 (double)
...


My method to read data from txt:

public ArrayList<Match> getMatches(){
try{
File file = new File("matches.txt");
FileReader readerF = new FileReader(file);
BufferedReader reader = new BufferedReader(readerF);

String line = null;

while((line = reader.readLine()) !=null){
//here i dont know what to do
}
}
catch(Exception e){
JOptionPane.showMessageDialog(null, "");
}
return matches;
}


Do You have any tips/tricks how to do that?
Thanks a lot for some answer

EDIT:

My Match class:

public class Match {

private String matchName;
private double course1;
private double courseX;
private double courseY;

public Match(String matchName, double course1, double courseX, double courseY){
this.matchName=matchName;
this.course1=course1;
this.courseX=courseX;
this.courseY=courseY;

}

}

Answer

Try this (I'm assuming the input file is valid so you might need to handle exceptions otherwise):

     public ArrayList<Match> getMatches(){
        try{
            File file = new File("matches.txt");
            FileReader readerF = new FileReader(file);
            BufferedReader reader = new BufferedReader(readerF);

            String line = null;
            String matchName = null;
            double course1;
            double courseX;
            double courseY;
            ArrayList<Match> matches = new ArrayList<>();
            int count = 0;

            while((line = reader.readLine()) !=null){
                   if (count%4 == 3) {
                       Match match = new Match(line, course1, courseX, courseY);
                       matches.add(match);
                   } else if (count%4 == 2) {
                       courseY = Double.parseDouble(line);
                   } else if (count%4 == 1) {
                       courseX = Double.parseDouble(line);
                   } else {
                       course1 = Double.parseDouble(line);
                   }
                   count++;
            }
        }
        catch(Exception e){
            JOptionPane.showMessageDialog(null, "");
        }
        return matches;
    }