Для считывания данных из CSV файла мы можем использовать Java класс Scanner.
Например, у нас есть файл test.csv с таким наполнением:
1 2 3 4 |
1,Андрей,программист,3000 USD 2,Ваня,тестер,2000 USD 3,Дима,программист,3000 USD 4,Оля,тестер,2000 USD |
Теперь создадим Java bean, который будет представлять столбцы в файле CSV.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
package ua.com.prologistic; public class Employee { private int id; private String name; private String role; private String salary; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getRole() { return role; } public void setRole(String role) { this.role = role; } public String getSalary() { return salary; } public void setSalary(String salary) { this.salary = salary; } @Override public String toString(){ return "\nID=" + getId() + "::Имя" + getName() + "::Должность=" + getRole() + "::Зарплата=" + getSalary(); } } |
Теперь напишем класс для считывания CSV файла в коллекцию. Использовать будем Scanner
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
package ua.com.prologistic; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class ReadCSVWithScanner { public static void main(String[] args) throws IOException { // открываем файл BufferedReader reader = new BufferedReader(new FileReader( "test.csv")); // считываем построчно String line = null; Scanner scanner = null; int index = 0; List<Employee> empList = new ArrayList<>(); while ((line = reader.readLine()) != null) { Employee emp = new Employee(); scanner = new Scanner(line); scanner.useDelimiter(","); while (scanner.hasNext()) { String data = scanner.next(); if (index == 0) emp.setId(Integer.parseInt(data)); else if (index == 1) emp.setName(data); else if (index == 2) emp.setRole(data); else if (index == 3) emp.setSalary(data); else System.out.println("Некорректные данные::" + data); index++; } index = 0; empList.add(emp); } //закрываем наш ридер reader.close(); System.out.println(empList); } } |
Обратите внимание, что мы в нашем сканере использовали запятую (,
) в качестве разделителя. Если входной файл использует другие разделители: (|
) или решетку (#
), нам лишь нужно указать этот разделитель в выше программе — остальное будет работать идеально.
Результат выполнения нашей программы:
1 2 3 4 5 |
[ ID = 1 :: ИмяАндрей :: Должность = программист :: Зарплата = 3000 USD, ID = 2 :: ИмяВаня :: Должность = тестер :: Зарплата = 2000 USD, ID = 3 :: ИмяДима :: Должность = программист :: Зарплата = 3000 USD, ID = 4 :: ИмяОля :: Должность = тестер :: Зарплата = 2000 USD] |
Следите за обновления раздела Java IO и сайта Javadevblog.com
А как читать CSV файл, в котором разные строки? Например:
1,Андрей,программист,3000 USD
2,Ваня,тестер,2000 USD
3,программист,2500 USD
4,Ваня,тестер,удалить
То есть, если нам нужно прочитать, проанализировать и выполнить какие-то действия с каждой строкой отдельно.
А как читать CSV файл, в котором разные строки? Например:
1,Андрей,программист,3000 USD
2,Ваня,тестер,2000 USD
3,программист,2500 USD
4,Ваня,тестер,удалить
То есть, если нам нужно прочитать, проанализировать и выполнить какие-то действия с каждой строкой отдельно.