您的位置:首页 > 编程语言 > Java开发

Java:简单的文件操作,将用字符表示的16进制数转为对应的2进制内容保存到新文件中

2015-01-06 00:00 417 查看
package main;
import  java.io.*;

class test{

private static String hexString = "0123456789abcdef";

public static void main(String[] args) throws IOException{
int argc = args.length;
if(argc==1){
String fileInPath = "src/resource/test.txt";
String fileOutPath = "src/resource/data.txt"; //相对路径
PacketsToFile(fileInPath,fileOutPath);
}else if(argc==2){
PacketsToFile(args[0],args[1]);//输入绝对路径
}else{
System.out.println("输入格式错误");
System.out.println("先用记事本替换文件中全部的'|'符号,输入的格式java -jar string2hex.jar D://test.txt D://data.txt第一个是原文件,后一个是生成的文件,需要自己先创建文件");
}

}

public static void PacketsToFile(String fileInPath,String fileOutPath) throws IOException{
try{
String encoding="UTF-8";
File file=new File(fileInPath);
File data=new File(fileOutPath);

DataOutputStream os = new DataOutputStream(new FileOutputStream(data));
if(file.isFile() && file.exists() && data.isFile() && data.exists()){
InputStreamReader read = new InputStreamReader(
new FileInputStream(file),encoding);
BufferedReader bufferedReader = new BufferedReader(read);
String lineTxt = null;
int i = 1,n = 1;
while((lineTxt = bufferedReader.readLine()) != null ){
if(i==(4*n-1)){ //取决于文件中数据包的位置,这里是在3,7,11..行
n++;
String temp = lineTxt.substring(4,lineTxt.length()).trim();
String len = Integer.toHexString(temp.length()/2);
//数据包前加入两个字节的数据包长度
if(len.length()==1){
len = "000"+len;
}else if(len.length()==2){
len = "00"+len;
}else if(len.length()==3){
len = "0"+len;
}else if(len.length()>4||len.length()==0){
System.out.println("帧内容异常");
}

String oneP = len+temp;
for (int j = 0; j < oneP.length(); j += 2){
byte oneByte = (byte)((hexString.indexOf(oneP.charAt(j))*16)
+(hexString.indexOf(oneP.charAt(j + 1))));
//把对应的整数转为一个字节
os.write(oneByte);
}
}
i++;
}
long sizeOfFile = (long) file.length();
System.out.println("原文件有 "+sizeOfFile*1.0/(1024.0*1024.0)+" MB");
System.out.println("包含"+(n-1)+"个数据包");
long sizeOfData = (long) data.length();
System.out.println("生成文件有 "+sizeOfData*1.0/(1024.0*1024.0)+" MB");
read.close();
os.close();
}else{
System.out.println("找不到指定的文件,请检查路径");
}
}catch (Exception e) {
System.out.println("读取文件时发生错误出错");
e.printStackTrace();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐