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

JAVA Dans DBF库,从DBF文件获取数据,字节[]到int,java,string,integer,byte,dbf,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.pri

我是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
问题是,原始值是字节[]。我可以将数据转换为字符串,但无法将数据转换为整数。我已经试过了:

Integer.parseInt(new String(rawValue))
但这是不可能做到的。我怀疑原始值存储的空间不仅仅是数字字符。有人能帮我解决这个问题吗

编辑: 为了更清楚地说明这一点,我已经尝试这样做:

System.out.println(new String(rawValue));
输出类似于[300](忽略[])
我注意到300之前有一些空格。

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

以下是FoxPro如何编写数字:

'N':数字存储为字符串,可能包含前导符号和小数分隔符,并用空格填充到字段大小。整数部分可能会将定义的小数点从右边挤出(即,将10写入定义为n(3,1)的字段,结果为“10”);溢出时,字段将用星号填充(就像将10写入定义为n(1)的字段时)

'I':原始32位整数(小端);值0x8000000(-2^31)是禁止的,表示溢出

'B':(又称“二进制64”)

'Y':按10000缩放的原始64位整数(小尾数)


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

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

以下是FoxPro如何编写数字:

'N':数字存储为字符串,可能包含前导符号和小数分隔符,并用空格填充到字段大小。整数部分可能会将定义的小数点从右边挤出(即,将10写入定义为n(3,1)的字段,结果为“10”);溢出时,字段将用星号填充(就像将10写入定义为n(1)的字段时)

'I':原始32位整数(小端);值0x8000000(-2^31)是禁止的,表示溢出

'B':(又称“二进制64”)

'Y':按10000缩放的原始64位整数(小尾数)


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

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

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

解决问题。

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

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

解决这个问题。

字符串形式是什么样子的?System.out.println(新字符串(rawValue));将打印类似于[300]的内容(忽略[])我注意到在300之前有一些空格字段。如何
(新字符串(rawValue))。trim()
?谢谢你的提示,你的提示解决了我的问题,非常感谢!谢谢你的提示,你的提示解决了我的问题,非常感谢!它在字符串形式中是什么样子的?System.out.println(新字符串(rawValue));将打印类似于[300]的内容(忽略[])我注意到在300之前有一些空格字段。如何
(新字符串(rawValue))。trim()
?谢谢你的提示,你的提示解决了我的问题,非常感谢!谢谢你的提示,你的提示解决了我的问题,非常感谢!