实际上我正在尝试使用Java(StringTokenizer
)解析txt文件。
我将每个记录作为字符串并解析它,因为没有分隔符。
FirstRow是整体标题。
第二条记录headerRecord记录,后跟其详细记录。
最后记录是预告片记录。
问题:我将如何验证/解析每个标题记录中有一个或多个详细记录。如果没有抛出错误。
HEADER 0010120140602090500000000
HEDREC1000000001 yyy 0327201404262014Z3USD eTCINTERFACE
DETREC2000000001 yyy 22222 bbbbb 44 0001140000.00C
DETREC2000000001 yyy 22222 aaaaa 44 0001140000.00D
HEDREC1000000002 yyy 0327201404262014Z3USD eTCINTERFACE
DETREC2000000002 yyy 22222 bbbbb 44 0001140000.00C
TRAILER 001012014060209050000000003
提前感谢您的帮助!!
答案 0 :(得分:1)
不要将StringTokenizer用于固定记录。
有两种情况:
使用记录终止符,就像常规换行符一样,它是最简单的:
try (BufferedReader in = new BufferedReader(new InputStreamReader(
new FileInputStream(file), StandardCharsets.ISO_8859_1))) {
for (;;) {
String record = in.readLine();
if (record == null) {
break;
}
String field1 = record.substring(0, 16).trim();
String field2 = record.substring(16, 20);
...
}
}
(修剪去除两侧的空间。)
对于固定长度的记录,请使用byte[RECORD_LENGTH]
并使用
byte[] record = new byte[120];
try (InputStream in = new BufferedInputStream(new FileInputStream))) {
for (;;) {
int nread = in.read(record);
if (nread < record.length) {
break;
}
String recordS = new String(record, StandardCharsets.ISO_8859_1);
...
为了提高效率,您可以查看内存映射I / O ByteBuffer
。