import java.io.file;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.Util.Stack;
import org.springframework.util.StringUtils;
/**
*
*修改DBF文件头中记录数的工具类
*/
public class DBFINfoUtil{
public void modifyDBFRecordLength(int num, String path){
RandomAccessFile raf = null;
try{
raf = new RandomAccessFile(new File(path), "rw");
raf.seek(4);//定位要修改的内容下标为第4个字节
byte[] bytes = intToHex(num);
raf.write(bytes);
}catch(IOException e){
e.printStackTrace();
} finally {
try{
if(raf!=null){
raf.close();
}
} catch (IOException e){
e.printStackTrace();
}
}
}
/**
* 获取记录条数的八位十六进制标识
* @param num 记录条数
* @return 八位的十六进制数
*/
public byte[] intToHex(int num){
int hex = Integer.parseInt(Integer.toHexString(num),16);
String hexStr = String.format("%08x", hex).toUpperCase();
String[] array = hexStr.split("(?<=\\G.{2})");
Stack<String> stack = new Stack<String>():
for(int i=0;i<array.length;i++){
stack.push(array[i]);
}
String str = "";
while(!stack.isEmpty()){
str += stack.pop();
}
byte[] hexStringToBytes = hexStringToBytes(str);
return hexStringToBytes;
}
/**
* 将Hex String转换为Byte数组
* @param hexString
* @return
*/
public byte[] hexStringToBytes(String hexString){
if(StringUtils.isEmpty(hexString){
return null;
}
hexString = hexString.toLowerCase();
final byte[] byteArray = new byte[hexString.length() >> 1];
int index = 0;
for(int i=0; i<hexString.length();i++){
if(index > hexString.length() -1){
return byteArray;
}
byte highDit = (byte)(Character.digit(hexString.charAt(index),16)&0xFF);
byte lowDit = (byte)(Character.digit(hexString.charAt(index + 1), 16)&0xFF);
byteArray[i] = (byte)(highDit << 4 | lowDit);
index += 2;
}
return byteArray;
}
}
07-21
05-26
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交