无法从dbf文件中读取字符串(但可以正确读取数字类型数据)Java,DBFReader

时间:2014-10-26 10:36:44

标签: java inputstream dbf

我目前正在使用DBFReader(github.com/jamel/dbf)来读取DBF文件,但是当它输出我认为是数据的哈希表示时?但是,对于数据为数字的列,它很好。

这是代码片段(非常基本的代码):

    InputStream inputStream = new FileInputStream("./src/data/dbf/Room_20040610.DBF");
    DbfReader reader = new DbfReader(inputStream);

    Object[] row;
    while ((row = reader.nextRecord()) != null) {
        System.out.println(row[1]);
    }

    reader.close();

字符串类型数据的输出

[B@54b749a5
[B@4d441b16
[B@324e68fb
[B@39ce508a
[B@1809b1ac
[B@246f9f88
[B@1c52ac68
[B@77b4ee5e
[B@78d9ab8
[B@61a8a9e7

预计会这样:

1101
1101
1101
1101
1101
1101
1101
1101
1101
1101

首先,只有一些假设:

  1. dbf文件没有损坏或不可读。

  2. 当我尝试使用System.out.println时,作为哈希值出现的“字符串”数据包含英语和非英语字符,但都不起作用。

  3. 我在Mac上使用Eclipse。 (我想知道它在Windows上是否有所不同?)

  4. 非常感谢有关如何使用DBFReader更正读取字符串的任何输入。

    谢谢!

2 个答案:

答案 0 :(得分:1)

而不是做

System.out.println(row[1]);

尝试将row[1]转换为预期的类型。例如

SOP(((String) row[1]).toString());   //if String is expected or
SOP(((String) row[1]));              //should also work

[B@54b749a5正在打印,因为row[1]会返回Object类型,然后当您将其传递给println时,它会使用toString()提供的Object定义1}} class。

答案 1 :(得分:1)

对象散列中的[B @表示它是一个字节数组,所以你需要这样做:

new String((byte[]) row[1])