如何实现读取以txt文本文件存储的16进制数据,并将其转换成10进制数据输出?数据如下,(注:每四个数字为一个16进制数据,即0958是一个16进制数据,0437是一个16进制数据,07AF是一个16进制数据。)由于项目需要,希望大侠早日垂怜帮助,万分感谢!
09 58 04 37 07 AF 09 35 00 5C 20 00 06 4A 07 2D 09 57 04 37 07 B0 08 DB 00 5C 20 00 06 B8 07 7D 09 56 04 37 07 B0 08 9F 00 5C 20 00 07 1C 07 C2 09 56 04 37 07 AF 08 79 00 5C 20 00 07 76 07 FD 09 56 04 37 07 AF 08 5F 00 5C 20 00 07 C1 08 2F 09 58 04 37 07 B0 08 5A 00 5C 20 00 08 04 08 17 09 58 04 37 07 AF 08 55 00 5C 20 00 08 35 08 0D 09 58 04 37 07 AF 08 52 00 5C 20 00 08 61 08 07 09 58 04 38 07 AF 08 4F 00 5C 20 00 08 84 08 07 09 58 04 38 07 AF 08 4D 00 5C 20 00 08 A3 08 0B 09 59 04 38 07 B0 08 4B 00 5C 20 00 08 BD 08 10 09 59 04 37 07 AF 08 4A 00 5C 20 00 08 D5 08 16 09 58 04 38 07 AF 08 49 00 5C 20 00 08 E7 08 1C 09 58 04 38 07 AF 08 49 00 5C 2008 50 09 59 04 3A 07 B0 08 4A 00 5C 20 00 09 36 08 50 09 58 04 3A 07 AF 08 4A 00 5C 20 00 09 36 08 50 09 58 04 3A 07 AF 08 49 00 5C 20 00 09 35 08 4E 09 58 04 3A 07 AF 08 47 00 5C 20 00 09 34 08 4C 09 59 04 3B 07 AF 08 47 00 5C 20 00 09 33 08 4B 09 58 04 3B 07 AF 08 48 00 5C 20 00 09 33 08 4C 09 58 04 3B 07 AF 08 4A 00 5C 20 00 09 36 08 4E 09 59 04 3B 07 AF 08 4B 00 5C 20 00 09 38 08 52 09 59 04 3B 07 AF 08 4E 00 5C 20 00 09 3B 08 55 09 58 04 3B 07 AF
09 58 04 37 07 AF 09 35 00 5C 20 00 06 4A 07 2D 09 57 04 37 07 B0 08 DB 00 5C 20 00 06 B8 07 7D 09 56 04 37 07 B0 08 9F 00 5C 20 00 07 1C 07 C2 09 56 04 37 07 AF 08 79 00 5C 20 00 07 76 07 FD 09 56 04 37 07 AF 08 5F 00 5C 20 00 07 C1 08 2F 09 58 04 37 07 B0 08 5A 00 5C 20 00 08 04 08 17 09 58 04 37 07 AF 08 55 00 5C 20 00 08 35 08 0D 09 58 04 37 07 AF 08 52 00 5C 20 00 08 61 08 07 09 58 04 38 07 AF 08 4F 00 5C 20 00 08 84 08 07 09 58 04 38 07 AF 08 4D 00 5C 20 00 08 A3 08 0B 09 59 04 38 07 B0 08 4B 00 5C 20 00 08 BD 08 10 09 59 04 37 07 AF 08 4A 00 5C 20 00 08 D5 08 16 09 58 04 38 07 AF 08 49 00 5C 20 00 08 E7 08 1C 09 58 04 38 07 AF 08 49 00 5C 2008 50 09 59 04 3A 07 B0 08 4A 00 5C 20 00 09 36 08 50 09 58 04 3A 07 AF 08 4A 00 5C 20 00 09 36 08 50 09 58 04 3A 07 AF 08 49 00 5C 20 00 09 35 08 4E 09 58 04 3A 07 AF 08 47 00 5C 20 00 09 34 08 4C 09 59 04 3B 07 AF 08 47 00 5C 20 00 09 33 08 4B 09 58 04 3B 07 AF 08 48 00 5C 20 00 09 33 08 4C 09 58 04 3B 07 AF 08 4A 00 5C 20 00 09 36 08 4E 09 59 04 3B 07 AF 08 4B 00 5C 20 00 09 38 08 52 09 59 04 3B 07 AF 08 4E 00 5C 20 00 09 3B 08 55 09 58 04 3B 07 AF
解决方案 »
- 关于HashMap的问题
- java.lang.NoSuchMethodError: 过路的来帮我解决一下这个问题 了 急 急 急
- 请问JAVA SWING能不能锁定整个WINDOWS页面?输入密码才能解锁
- [求助]Vector元素控制
- ???如何在Java 中自定义一个事件???
- 如何获得系统目录啊?各位请帮忙!!!谢谢!!在线等!
- 请问如何让double仅仅保留小数点后两位?
- 简单问题:如何使用SDK编译java文件
- 请问有没有什么方法可以访问c++写的类和方法呢?
- 求树形结构的代码!
- 谁帮忙解释一下这个错误的产生 感激不尽
- 我的这段代码sum值在第一次计算时不出错,为什么重复循环的时候sum值出错?
public class DiskTest {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
File file = new File("D:\\ComRcvData2.txt");
byte[] content=readFile(file);
System.out.println(content);
writeBytes("D:\\ComRcvData1.txt",content);
} /** *//**读文件到字节数组
* @param file
* @return
* @throws Exception
*/
static byte[] readFile(File file) throws Exception {
if (file.exists() && file.isFile()) {
long fileLength = file.length();
if (fileLength > 0L) {
BufferedInputStream fis = new BufferedInputStream(
new FileInputStream(file));
byte[] b = new byte[(int) fileLength];
while (fis.read(b)!= -1) {
for (int j = 0; j < b.length; j++) {
System.out.println(b[j]);
}
}
fis.close();
fis = null; return b;
}
} else {
return null;
}
return null;
} /** *//**将字节数组写入文件
* @param filePath
* @param content
* @return
* @throws IOException
*/
static boolean writeBytes(String filePath, byte[] content)
throws IOException {
File file = new File(filePath);
synchronized (file) {
BufferedOutputStream fos = new BufferedOutputStream(
new FileOutputStream(filePath));
fos.write(content);
fos.flush();
fos.close();
}
return true; }
}
如:
byte b = -1;
byte[] data = new byte[4];
while((b = (byte)input.read()) != -1){
if(!' '== b && !'\r'== b && !'\n'==b && i<4){
data[i] = b;
i++;
}
if(i==4){
String dataStr = new String(data);
int dataInt = Integer.parseInt(dataStr, 16);
i=0;
}
}
FileInputStream fis = new FileInputStream(fileChooser.getSelectedFile().getAbsolutePath());
InputStreamReader isr = new InputStreamReader(fis);
BufferedReader bf = new BufferedReader(isr);
String line = "";
int row = 0;
while ((line = bf.readLine()) != null) {
String[] data = line.split(" ");
但是我读出来用system.out.println()输出看了下与自己文本文件显示的不一样啊,
我们先不说以十进制输出了,能不能实现读取的内容就是文本显示的内容呢?
37 07 AF 08 55 00 5C 20 00 08 35 08 0D 09 58 04 37 07 AF 08 52 00 5C 20 00 08 61 08 07 09 58 04 38 07 AF 08 4F 00 5C 20 00 08 84 08 07 09 58 04 38 07 AF 08 4D 00 5C 20 00 08 A3 08 0B 09 59 04 38 07 B0 08 4B 00 5C 20 00 08 BD 08 10 09 59 04 37 07 AF 08
其中 3707是一个十六进制数,AF08是一个十六进制数,一次类推。
FileInputStream fis = new FileInputStream(fileChooser.getSelectedFile().getAbsolutePath());
InputStreamReader isr = new InputStreamReader(fis);
BufferedReader bf = new BufferedReader(isr);
String line = "";
int row = 0;
while ((line = bf.readLine()) != null) {
String[] data = line.split(" ");
能读出文件内容.如不能正常显示就是你文件的编码与你读取的编码不一致.
while((b = (byte)input.read()) != -1){
if(!' '== b && !'\r'== b && !'\n'==b && i<4){
data[i] = b;
i++;
}
诚然,我也怀疑是编码格式的问题,因为我新建txt然后从原文件copy出来部分数据,正常读取;
但是我全部copy过来就不能正常读取了。所以我怀疑不是文件数据太大就是格式问题。注:read和readline方法我都用过了。
我的方法只能使用与ascii吗。对于unicode编码的因为是使用变长存储。这时文件一个字节就不能代表一个字符。
个人认为对于对于unicode的编码还是先转化成ascii吗比较好处理。
还有一点要注意的是:在java内存中字符串都是以unicode编码存放。ps:我的方法是我的写的伪代码。
应该改为
if(' '!= b && '\r'!= b && !'\n'!=b ).转化方法很多:
最好的方法个人认为:
InputStreamReader isr = new InputStreamReader(fis, "对应的文件编码");
BufferedReader bf = new BufferedReader(isr);
然后一行读取,得到行之后调用getBytes("gbk"),然后byte再转入宁外的文件就可以实现转化。
http://topic.csdn.net/u/20110715/09/86845f38-0ab8-4f4e-8c0f-870762bd9476.html