gpt4 book ai didi

Java基于位置的文件解析

转载 作者:行者123 更新时间:2023-12-01 12:45:20 25 4
gpt4 key购买 nike

实际上,我正在尝试使用 Java(StringTokenizer) 解析 txt 文件。我将每个记录作为一个字符串并解析它,因为没有分隔符。FirstRow 是整体标题。第二条记录是 headerRecord 记录,后面是其详细信息记录。最后一条记录是预告片记录。

问题:我将如何验证/解析每个 header 记录是否有一个或多个详细记录。如果不抛出错误。

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

提前感谢您的帮助!!

最佳答案

不要将 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]并使用a读取

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

关于Java基于位置的文件解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24760984/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com