Java定宽文件格式读/写库

TyC*_*TyC 6 java file fixed-length-record

我正在寻找一个很好的 Java 库,它可以轻松地允许读/写固定宽度的文件。需要维护遗留系统,即需要文件才能使用 COBOL。

任何建议都非常感谢!

谢谢。

Jer*_*kes 5

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_
Run Code Online (Sandbox Code Playgroud)

阅读代码:

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));
Run Code Online (Sandbox Code Playgroud)

输出:

[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]
Run Code Online (Sandbox Code Playgroud)

披露:我是这个图书馆的作者。它是开源且免费的(Apache V2.0 许可)。


Pet*_*rey 4

我会使用 ByteBuffer,可能与内存映射文件一起使用。这允许以大端或小端读取/写入原始类型。此选项最适合固定宽度的二进制数据。

对于固定宽度的文本,您可以使用BufferedReader.readLine()String.substring(from, to)来获取所需的字段。要输出固定宽度字段,您可以使用PrintWriter.printf(format, fields ...).