How to easily process a CSV file into a <MyClass> list

In my application, I use many CSV files that I need to read and create lists based on. I would like to find an easy way to do this. Do you know any simple structure that does this without using the number of configuration files, etc.?

For example, I have a Person class:

public class Person {
    String name;
    String surname;

    double shoeSize;
    boolean sex; // true: male, false:female

    public Person() {
    }

    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 double getShoeSize() {
            return shoeSize;
    }

    public void setShoeSize(double shoeSize) {
            this.shoeSize = shoeSize;
    }

    public boolean isSe) {
            return sex;
    }

    public void setSeboolean sex) {
            this.sex = sex;
    }

}

For this class, I prepared a CSV file:

name,surname,shoesize,sex
Tom,Tommy,32,true
Anna,Anny,27,false

How can i make it easy?

+4
source share
6 answers

, Java CSV . OpenCSV, JSefa jCSV, .

, , jCSV . jCSV, .

Reader reader = new FileReader("persons.csv");

CSVReader<Person> csvPersonReader = ...;

// read all entries at once
List<Person> persons = csvPersonReader.readAll();

// read each entry individually
Iterator<Person> it = csvPersonReader.iterator();
while (it.hasNext()) {
  Person p = it.next();
  // ...
}

, CSV , - , .

br = new BufferedReader(new FileReader(csvFileToRead));  
List<Person> personList = new ArrayList<>();
while ((line = br.readLine()) != null) {  
       // split on comma(',')  
       String[] personCsv = line.split(splitBy);  

       // create car object to store values  
       Person personObj = new Person();  

       // add values from csv to car object  
       personObj.setName(personCsv[0]);  
       personObj.setSurname(personCsv[1]);  
       personObj.setShoeSize(personCsv[2]);  
       personObj.setGender(personCsv[3]); 

       // adding car objects to a list  
       personList.add(personObj);         
} 

CSV bean , , , DozerBeanMapper.

, .

+3

, , ( ). . , , :

public List<Person> readFile(String fileName) throws IOException {
    List<Person> result = new ArrayList<Person>();
    BufferedReader br = new BufferedReader(new FileReader(new File(fileName)));
    try {
        // Read first line
        String line = br.readLine();
        // Make sure file has correct headers
        if (line==null) throw new IllegalArgumentException("File is empty");
        if (!line.equals("name,surname,shoesize,sex"))
            throw new IllegalArgumentException("File has wrong columns: "+line);
        // Run through following lines
        while ((line = br.readLine()) != null) {
            // Break line into entries using comma
            String[] items = line.split(",");
            try {
                // If there are too many entries, throw a dummy exception, if
                // there are too few, the same exception will be thrown later
                if (items.length>4) throw new ArrayIndexOutOfBoundsException(); 
                // Convert data to person record
                Person person = new Person();
                person.setName    (                     items[0] );
                person.setSurname (                     items[1] );
                person.setShoeSize(Double .parseDouble (items[2]));
                person.setSex     (Boolean.parseBoolean(items[3]));
                result.add(person);
            } catch (ArrayIndexOutOfBoundsException|NumberFormatException|NullPointerException e) {
                // Caught errors indicate a problem with data format -> Print warning and continue
                System.out.println("Invalid line: "+ line);
            }
        }
        return result;
    } finally {
        br.close();
    }
}

, catch Java 7. Java 3 catch ArrayIndexOutOfBoundsException|NumberFormatException|NullPointerException Exception. , , , , , , .

, , , , , , ...

, , - line while , . , (, ).

, , , , (, ", " ). "", , , , , , [1] [2] [3 ] [4] . , , , , , - , , ...

+2

. CSV, wiki

, Pojo :

@JsonPropertyOrder({ "name", "surname", "shoesize", "gender" })
public class Person {

    public String name;
    public String surname;
    public int shoesize;
    public String gender;

}

CSV :

Tom,Tommy,32,m
Anna,Anny,27,f

:

MappingIterator<Person> personIter = new CsvMapper().readerWithTypedSchemaFor(Person.class).readValues(csvFile);
List<Person> people = personIter.readAll();

, , , CSV @JsonPropertyOrder, , .

+2

OpenCSV

, :

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.List;

import au.com.bytecode.opencsv.CSVReader;

public class CSVReaderImplementor {
  private String fileName;
  private CSVReader reader;
  private List<String[]> entries;

  public CSVReaderImplementor(String fileName) throws IOException, FileNotFoundException {
    this.fileName = fileName;
    reader = new CSVReader(new FileReader(this.fileName));

    entries = reader.readAll();

  }

  public List getEntries() {
    return entries;
  }

  public static void main(String[] args) throws FileNotFoundException, IOException {
    CSVReaderImplementor cri = new CSVReaderImplementor("yourfile.csv");

    for(int i = 0; i < 50; i++) {
      System.out.println(cri.getEntries().get(i).toString());
    }
  }
}

A List String[]. String Bean.

+1

opencsv - . , . opencsv website ( sourceforge, deploy) maven.

java bean , CSV ( ).

:

Reader reader = // ... reader for the input file

// let it map the csv column headers to properties
CsvToBean<Person> csvPersons = new CsvToBean<Person>();
HeaderColumnNameMappingStrategy<Person> strategy = new HeaderColumnNameMappingStrategy<Person>();
strategy.setType(Person.class);

// parse the file and get a list of persons
List<Person> persons = csvPersons.parse(strategy, reader);

.

0

, SuperCSV + Dozer java bean CSV

http://supercsv.sourceforge.net/dozer.html

-1

Source: https://habr.com/ru/post/1532325/


All Articles