Библиотека чтения и записи формата файлов Java с фиксированной шириной

Я ищу хорошую библиотеку Java, которая легко позволяет читать / записывать файлы фиксированной ширины. Необходим для поддержки устаревших систем, т.е. для работы с COBOL необходимы файлы.

Любые предложения с благодарностью!

Благодарю.

5 ответов

Решение

Я бы использовал ByteBuffer, возможно, с отображенными в память файлами. Это позволяет читать / писать примитивный тип с прямым или прямым порядком байтов. Этот вариант лучше всего подходит для двоичных данных фиксированной ширины.

Для текста фиксированной ширины вы можете использовать BufferedReader.readLine() а также String.substring(from, to) чтобы получить поля, которые вы хотите. Для вывода полей фиксированной ширины вы можете использовать PrintWriter.printf(format, fields ...),

uniVocity-parsers анализирует / записывает входы с фиксированной шириной (а также CSV и TSV). Он имеет довольно много функций, которые вы могли бы использовать.

Пример ввода:

YearMake_Model___________________________________Description_____________________________Price___
1997Ford_E350____________________________________ac, abs, moon___________________________3000.00_
1999ChevyVenture "Extended Edition"______________________________________________________4900.00_
1996Jeep_Grand Cherokee__________________________MUST SELL!
air, moon roof, loaded_______4799.00_
1999ChevyVenture "Extended Edition, Very Large"__________________________________________5000.00_
_________Venture "Extended Edition"______________________________________________________4900.00_

Код для чтения:

FixedWidthFieldLengths lengths = new FixedWidthFieldLengths(4, 5, 40, 40, 8);
FixedWidthParserSettings settings = new FixedWidthParserSettings(lengths);
//sets the character used for padding unwritten spaces in the file
settings.getFormat().setPadding('_');

// creates a fixed-width parser with the given settings
FixedWidthParser parser = new FixedWidthParser(settings);
// parses all rows in one go.
List<String[]> allRows = parser.parseAll(new FileReader(yourFile));

Выход:

[Year, Make, Model, Description, Price]
[1997, Ford, E350, ac, abs, moon, 3000.00]
[1999, Chevy, Venture "Extended Edition", null, 4900.00]
[1996, Jeep, Grand Cherokee, MUST SELL!
air, moon roof, loaded, 4799.00]
[1999, Chevy, Venture "Extended Edition, Very Large", null, 5000.00]
[null, null, Venture "Extended Edition", null, 4900.00]

Раскрытие: я являюсь автором этой библиотеки. Это с открытым исходным кодом и бесплатно (лицензия Apache V2.0).

Вы также можете взглянуть на Fixedformat4j: http://fixedformat4j.ancientprogramming.com/

Это точное назначение этой библиотеки

Подход, основанный на схеме:

  • JSaPar Позволяет указать схему, с помощью которой вы можете анализировать или генерировать текст фиксированной ширины. Также выполняет некоторые базовые проверки типов и преобразования типов.

Вы могли бы посмотреть на

  • Библиотека JRecord для чтения / записи файлов cobol из Java, поддерживает различные диалекты и форматы Cobol
  • cb2java Чтение файлов Cobol
  • Библиотека Legstar для обработки Cobol Ata
  • cb2xml Преобразует файлы Cobol в Xml
Другие вопросы по тегам