我是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之前有一些空白。
答案 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())
解决问题。