Я читаю плоские файлы в Java с фиксированной длиной Я новичок в этом, может ли кто-нибудь помочь мне, как сделать считыватель фиксированной длины?
Добро пожаловать в StackOverflow. Это сайт вопросов и ответов. Это не "справочный" сайт, потому что для этого потребуется другой формат, а не "вопрос-ответ". Прочтите почему "кто-нибудь может мне помочь" не настоящий вопрос. Пожалуйста, проведите небольшое исследование, создайте программу, и если у вас есть какие-либо конкретные вопросы, на которые можно ответить, вы можете опубликовать их здесь.
Это будет текстовый файл @Joop Eggen




Когда это текстовый файл с фиксированной длиной линии, достаточно обычной программы для чтения.
Это предполагает, что в конце каждой записи есть новая строка.
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). Это длина в chars, но, скорее всего, это также длина в байтах, поскольку записи фиксированной длины, вероятно, имеют однобайтовую кодировку.
Для некоторого пользовательского класса MyRecord, отражающего строку CSV:
public class MyRecord {
public long id;
public String name;
public int age;
...
}
спасибо за поддержку, но мне это не помогает
не могли бы вы подробнее рассказать об этом.
Я добавил еще немного. Попробуйте прочитать только строки (может быть, из уменьшенного небольшого файла примера) и начните работать оттуда, проверяя длину строки. Отлаживать.
Двоичные данные или текст? FileInputStream с фиксированным размером
byte[]будет отправной точкой.