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

时间:2015-12-15 16:19:34

标签: java string integer byte dbf

我是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 []。我可以将数据转换为String,但我无法将数据转换为整数。我已经尝试过了:

Integer.parseInt(new String(rawValue))

但它无法完成。我怀疑rawValue存储了一些空间而不仅仅是数字字符。任何人都可以帮我解决这个问题吗?

编辑: 为了更清楚,我已经尝试这样做了:

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

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

2 个答案:

答案 0 :(得分:0)

如何转换数字字段的原始字节取决于其实际类型,该字段在字段定义中存储为单个字符。有good overview on clicketyclick

这是FoxPro如何编写数字:

'N':数字存储为一个字符串,可能包含一个前导符号和一个小数点分隔符,用空格填充到字段大小。整数部分可以在右边推出定义的小数位(即将10写入定义为n(3,1)的字段,得到'10。');在溢出时,该字段将填充星号(例如将10写入定义为n(1)的字段时)。

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

'B'raw 64-bit IEEE double(a.k.a。'binary64')。

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

注意:DBF文件通常由本地代码编写,这些代码不符合dBASE或Fox等程序设置的任何事实标准​​,因此需要注意。 Fox和dBASE不会用[300]这样的原始内容写一个数字字段,所以你手上可能有一个字符串字段或者b0rked工具写的东西。

答案 1 :(得分:0)

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

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

解决问题。