2011-12-29 81 views
3

我正在寻找一个很容易读/写固定宽度文件的好Java库。需要维护遗留系统,即需要使用COBOL文件。Java固定宽度文件格式读/写库

任何建议,非常感谢!

谢谢。

+0

也问在这里:http://stackoverflow.com/questions/7482021/tactics-for-parsing-fixed-width-text-log-in-java – wrschneider 2011-12-29 16:04:34

+0

我结束了使用BeanIO,但感谢您的帮助!让我指出了正确的方向。 – TyC 2011-12-30 15:59:48

回答

2

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

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

1

你可以看看

  • JRecord图书馆阅读从Java /写COBOL文件,支持多种的Cobol方言和格式
  • cb2java读的Cobol文件
  • Legstar库理线COBOL ATA
  • cb2xml将Cobol文件转换为Xml
1

基于模式的方法:

  • JSaPar允许您指定的模式,通过它可以解析或生成固定宽度的文本。也做一些基本的类型检查和类型转换。
4

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许可证)。