Библиотека чтения и записи формата файлов 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 Позволяет указать схему, с помощью которой вы можете анализировать или генерировать текст фиксированной ширины. Также выполняет некоторые базовые проверки типов и преобразования типов.