2011-12-29 79 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許可證)。