Как читать файл фиксированной длины в Java

Я читаю плоские файлы в Java с фиксированной длиной Я новичок в этом, может ли кто-нибудь помочь мне, как сделать считыватель фиксированной длины?

Двоичные данные или текст? FileInputStream с фиксированным размером byte[] будет отправной точкой.

Joop Eggen 06.03.2019 16:38

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

RealSkeptic 06.03.2019 16:39

Это будет текстовый файл @Joop Eggen

Kalpesh Z 08.03.2019 04:04
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
3
3 308
1

Ответы 1

Когда это текстовый файл с фиксированной длиной линии, достаточно обычной программы для чтения.

Это предполагает, что в конце каждой записи есть новая строка.

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;
    ...
}

спасибо за поддержку, но мне это не помогает

Kalpesh Z 12.03.2019 10:32

не могли бы вы подробнее рассказать об этом.

Kalpesh Z 12.03.2019 10:32

Я добавил еще немного. Попробуйте прочитать только строки (может быть, из уменьшенного небольшого файла примера) и начните работать оттуда, проверяя длину строки. Отлаживать.

Joop Eggen 12.03.2019 12:05

Другие вопросы по теме