Когда это текстовый файл с фиксированной длиной строк , достаточно обычного считывателя.
Это предполагает наличие новой строки в конце каждой записи.
List<MyRecord> result = new ArrayList<>();
Path file = Paths.get("C:/Import/20190308.txt");
Charset charset = Charset.defaultCharset();
Files.lines(path, charset)
.filter(line -> line.length() != 142)
.forEach(line -> {
MyRecord record = new MyRecord();
record.id = Long.parseLong(line.substring(0, 10).trim());
record.name = line.substring(10, 50).trim();
record.age = Integer.parseInt(line.substring(50, 53).trim());
...
result.add(record);
});
String.trim()
удаление пробелов до ("Мэри") и после ("89"). String.substring(position, nextPosition)
выбирает фиксированное поле.
Строка чтения не содержит символов новой строки - \r\n
или \n
в целом.
Есть проверка на длину строки (здесь 142). Это длина в char
с, но, скорее всего, это также длина в байтах, поскольку записи фиксированной длины, вероятно, находятся в однобайтовой кодировке.
Для некоторого пользовательского класса MyRecord, отражающего строку CSV:
public class MyRecord {
public long id;
public String name;
public int age;
...
}