【问题标题】:How to read fixed length file in java如何在java中读取固定长度的文件
【发布时间】:2019-07-28 08:03:06
【问题描述】:

我正在用 Java 读取固定长度的平面文件 我是新手,谁能帮我看看如何做定长阅读器?

【问题讨论】:

  • 二进制数据还是文本?具有固定大小 byte[] 的 FileInputStream 将是一个起点。
  • 欢迎来到 StackOverflow。这是一个问答网站。它不是“帮助”网站,因为这需要不同的格式,而不是“问答”。请阅读why "can someone help me" not a real question。请做一些研究,创建一个程序,如果您有任何具体的、可回答的问题,欢迎在这里发帖。
  • 它将是文本文件@Joop Eggen

标签: java parsing reader


【解决方案1】:

当它是一个文本文件,固定长度,一个普通的阅读器就足够了。

这假设每条记录的末尾都有一个换行符。

List<MyRecord> result = new ArrayList<>();

Path file = Paths.get("C:/Import/20190308.txt");
Charset charset = Charset.defaultCharset();

Files.lines(path, charset)
    .filter(line -> line.length() != 142)
    .forEach(line -> {
        MyRecord record = new MyRecord();
        record.id = Long.parseLong(line.substring(0, 10).trim());
        record.name = line.substring(10, 50).trim();
        record.age = Integer.parseInt(line.substring(50, 53).trim());
        ...
        result.add(record);
    });

String.trim() 删除了 ("Mary") 之前和之后 ("89") 的填充空格。 String.substring(position, nextPosition) 选择固定字段。

读取的行没有换行符 - 通常是 \r\n\n。 检查行长(此处为 142)。这是chars 中的长度,但也很可能是以字节为单位的长度,因为固定长度的记录可能在一个单字节字符集中。


对于一些自定义类 MyRecord 镜像 CSV 行:

public class MyRecord {
    public long id;
    public String name;
    public int age;
    ...
}

【讨论】:

  • 感谢您的支持,但这对我没有帮助
  • 能否详细说明一下。
  • 我加了一点。尝试只读取行(可能来自缩减的小样本文件)并从那里开始工作,检查行长。调试。
猜你喜欢
  • 2015-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-17
  • 2013-01-01
  • 1970-01-01
相关资源
最近更新 更多