JAVA Dans DBF库,从DBF文件中获取数据,byte[]到int



我是Java的新手(大约3个月前),现在我正试图使用Java程序从DBF文件中获取数据。我已经有了Dans DBF库来连接我的程序和DBF文件。我用这个代码打开文件:

Table table = new Table(new File(Filename)); // get the file
try {
    table.open(IfNonExistent.ERROR); // open the file
} catch (Exception e){
    System.out.println("Error : " + e);
}
List<Field> fields = table.getFields(); // get the column
Iterator<Record> recordIterator = table.recordIterator(); // get the rows

如果我要获取数据,我会使用这个代码

byte[] rawValue = record.getRawValue(fields.get(1)); // to get data from row column 1

问题是,rawValue是byte[]。我可以将数据转换为字符串,但不能将数据转换成整数。我已经尝试过了:

Integer.parseInt(new String(rawValue))

但这是不可能的。我怀疑rawValue存储的空间不仅仅是数字字符。有人能帮我解决这个问题吗?

编辑:为了更清楚地表明这一点,我已经尝试过了:

System.out.println(new String(rawValue));

输出将类似于[300](忽略[])我注意到300之前有一些空格。

如何转换数字字段的原始字节取决于其实际类型,该类型存储为字段定义中的单个字符。关于clicketyclick有一个很好的概述。

以下是FoxPro如何编写数字:

'N':数字存储为一个字符串,其中可能包含一个前导符号和一个十进制分隔符,并用空格填充到字段大小。整数部分可以在右边推出定义的小数位数(即,将10写入定义为n(3,1)的字段导致"10.");在溢出时,字段将填充星号(类似于将10写入定义为n(1)的字段时)。

'I':原始32位整数(Little Endian);值0x80000000(-2^31)被禁止并且表示溢出。

'B':原始64位IEEE双精度(也称为'binary64')。

'Y':原始64位整数(Little Endian)按10000 缩放

注意:DBF文件通常是由本土代码编写的,这些代码不符合dBASE或Fox等程序设置的任何事实上的标准,因此请注意emptor。Fox和dBASE不会编写像[300]这样的原始内容的数字字段,因此您可能手头有一个字符串字段或由b0rked工具编写的内容。

非常感谢您的回复。特别是PM 77-1的评论

Integer.parseInt(new String(rawValue).trim())

解决问题。

最新更新