Самый простой способ решить эту проблему - использовать библиотеку коллекций и создать список карт, где ключами карты являются имена столбцов, например:
List<Map<String,String>> records = someCodeForReadingDataFromFile();
Где вы разбиваете каждую строку вв массив, а затем создать карту значений:
List<Map<String,String>> someCodeForReadingDataFromFile() {
List<<Map<String,String>> rowsList = new LinkedList<<Map<String,String>>();
final String[] columnNames = {"Column1", "Column2", "Column3"};
// add some loop to read one line at the time from the file
...
String[] rows = line.trim().split(",");
Map<String, String> rowMap = new HashMap<String, String>();
for(int columnIndex = 0; columnIndex < columnNames.length; columnIndex++) {
rowMap.put(columnNames[columnIndex], rows[columnIndex]);
}
rowsList.add(rowMap);
// repeat this until you reach EOF
return rowsList;
}
Затем вы можете получить доступ ко всем ячейкам в CSV-файле, их индекс строки и имя столбца:
String valueOne = records.get(0).get("Column1"); // will set the value to "val10"
Если столбецимена являются фиксированными, вы все равно можете сделать перечисление, такое как
public enum Columns {
Column1, Column2;
}
, а затем использовать метод name (), унаследованный от класса Enum, чтобы получить значения:
String valueOne = records.get(0).get(Columns.Column1);
Однако,если вы решите использовать библиотеку для упрощения этого процесса, я действительно могу порекомендовать библиотеку Smooks или даже Apache Commons CSV (действительно легкий!).