JAVA将文件转成十六进制字符串和十六进制字符串生成文件的方法

以下代码以APK文件为例,其他格式的文件方法一样,代码如下:

package com.evideostb.billsystem.module.update;

import java.io.*;

/**
 * Created by zhangchuanzhao on 2015-12-22 15:31.
 */
public class ExportApk {
   private static final String EXPORT_PATH = "E:/易通管理系统/开发库/exe/Android/";

   public static void main(String[] args) {
      ExportApk apk = new ExportApk();
//    apk.apkToHex();
      apk.hexToApk("","E:/易通管理系统/开发库/exe/Android/part_ytcorridor-debug.apk");
   }

   /**
    * APK文件转成十六进制
    */
   public void apkToHex(){
      try
      {
         StringBuffer sb = new StringBuffer();
         FileInputStream fis = new FileInputStream("C:/android/part_ytcorridor-debug.apk");
         java.io.ByteArrayOutputStream bos = new java.io.ByteArrayOutputStream();

         byte[] buffer = new byte[1024];
         int read = 1024;
         int readSize = 1024;
         while (read == readSize) {
            read = fis.read(buffer, 0, readSize);
            bos.write(buffer, 0, read);
         }
         // 得到图片的字节数组
         System.out.println(bos.toString());

         byte[] result = bos.toByteArray();
         // 字节数组转成十六进制
         String str = byte2HexStr(result);
            /*
             * 将十六进制串保存到txt文件中
             */
         PrintWriter pw = new PrintWriter(new FileWriter("C:/android/apk1.txt"));
         pw.println(str);
         pw.close();
      }
      catch (IOException e)
      {
         e.printStackTrace();
      }
   }

   /**
    * 十六进制转成APK
    * @param hex
    * @param filePath
    */
   public static void hexToApk(String hex, String filePath){
      StringBuilder sb = new StringBuilder();
      sb.append(hex);
      saveToApkFile(sb.toString().toUpperCase(), EXPORT_PATH + filePath);
   }

   public static void saveToApkFile(String src, String output)
   {
      if (src == null || src.length() == 0)
      {
         return;
      }
      try
      {
         FileOutputStream out = new FileOutputStream(new File(output));
         byte[] bytes = src.getBytes();
         for (int i = 0; i < bytes.length; i += 2)
         {
            out.write(charToInt(bytes[i]) * 16 + charToInt(bytes[i + 1]));
         }
         out.close();
      }
      catch (Exception e)
      {
         e.printStackTrace();
      }
   }

   private static int charToInt(byte ch)
   {
      int val = 0;
      if (ch >= 0x30 && ch <= 0x39)
      {
         val = ch - 0x30;
      }
      else if (ch >= 0x41 && ch <= 0x46)
      {
         val = ch - 0x41 + 10;
      }
      return val;
   }

   /*
    * 实现字节数组向十六进制的转换方法一
    */
   public static String byte2HexStr(byte[] b)
   {
      String hs = "";
      String stmp = "";

      for (int n = 0; n < b.length; n++)
      {
         stmp = (Integer.toHexString(b[n] & 0XFF));
         if (stmp.length() == 1)
            hs = hs + "0" + stmp;
         else
            hs = hs + stmp;
      }
      return hs.toUpperCase();
   }

}


转载于:https://my.oschina.net/zchuanzhao/blog/550256

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值