当前位置: 移动技术网 > IT编程>开发语言>Java > 利用Java读取二进制文件实例详解

利用Java读取二进制文件实例详解

2019年07月19日  | 移动技术网IT编程  | 我要评论

前言

本文主要给大家介绍了关于java读取二进制文件的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。

读hex写csv

data目录下有little-endian bin文件,2个字节代表一个数字。

bin存储的数据格式可自己定义。相同的方法可以直接应用到android中。

`-- networkproj
 |-- data
 |-- networkproj.iml
 |-- out
 `-- src

实现方法

private static void convertfiles() {
 file folder = new file("data"); // data folder
 log("--------- read little-endian data from bin file ---------");
 if (!folder.exists()) {
  log("folder is not exist!");
  return;
 }
 file outputfolder = new file(folder.getabsolutepath() + file.separator + "output");
 if (!outputfolder.exists()) {
  boolean newoutput = outputfolder.mkdir();
  log("new output folder " + newoutput);
 }
 file[] files = folder.listfiles();
 if (files != null) {
  log("folder is " + folder.getabsolutepath());
  for (file f : files) {
   log("\t" + f.getname());
  }
 } else {
  log("nothing in this folder");
  return;
 }
 for (file currentfile : files) {
  if (!currentfile.isfile()) {
   return;
  }
  string filename = currentfile.getname();
  filename = filename.substring(0, filename.length() - 4); // delete suffix
  file csvfile = new file(outputfolder.getabsolutepath() + file.separator + filename + ".csv");
  if (csvfile.exists()) {
   boolean deres = csvfile.delete();
   log("delete old csv: " + deres);
  }
  byte[] readbytes = new byte[512];
  try {
   boolean newcsv = csvfile.createnewfile();
   log(csvfile.getabsolutepath() + " " + newcsv);
   fileoutputstream csvfos = new fileoutputstream(csvfile);
   inputstream in = new fileinputstream(currentfile);
   while (in.read(readbytes) != -1) {
    int[] csvdata = convertbytestoints(readbytes);
    for (int d : csvdata) {
     csvfos.write(string.valueof(d).getbytes());
     csvfos.write("\n".getbytes());
    }
   }
   csvfos.flush();
   csvfos.close();
  } catch (exception e) {
   e.printstacktrace();
  }
 }
}
// little-endian; 2 bytes -> 1 int
private static int[] convertbytestoints(byte[] inputdata) {
 int[] rawdata = new int[inputdata.length / 2];
 int rawindex = 0;
 for (int i = 0; i < inputdata.length; i += 2) {
  int raw = (0xff & inputdata[i + 1]) * 256 + (0xff & inputdata[i]);
  if (raw >= 32768) {
   raw -= 65536;
  }
  rawdata[rawindex] = raw;
  rawindex++;
 }
 return rawdata;
}
private static void log(string l) {
 system.out.println(l);
}

控制台输出

--------- read little-endian data from bin file ---------
new output folder true
folder is g:\javaproj\networkproj\data
 data20170215_180621.bin
 output
g:\javaproj\networkproj\data\output\data20170215_180621.csv true

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对移动技术网的支持。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网