文档章节

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

zchuanzhao
 zchuanzhao
发布于 2015/12/24 09:49
字数 378
阅读 173
收藏 3

以下代码以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();
   }

}


© 著作权归作者所有

共有 人打赏支持
zchuanzhao
粉丝 50
博文 242
码字总数 145449
作品 1
福州
程序员
私信 提问
Java中二进制,十进制,十六进制装换

Java中二进制,十进制,十六进制装换 十进制转成十六进制: Integer.toHexString(int i) 十进制转成八进制 Integer.toOctalString(int i) 十进制转成二进制 Integer.toBinaryString(int i) ...

eric_zhang
2011/07/27
0
0
java 将十进制转换成十六进制

java 将十进制转换成十六进制字符串,例如十进制421393700转换成十六进制为191DF524,怎么写个java方法变成字节从低到高排列为24F51D19

dtb1332006
2012/08/02
2.3K
1
Java HexString-字节数组与十六进制字符数组转换

Java HexString-字节数组与十六进制字符数组转换 Java中byte(字节)用二进制表示占用8 bit (位),而我们知道16进制的每个字符需要用4位二进制位来表示,所以我们就可以把每个byte转换成两...

秋风醉了
2015/04/07
0
0
JNI调用c++实现AES加密解密

最近项目中用到数据加密解密的功能,由于Android、iOS以及服务器端都需要用到这个功能。而不同平台上加密出来的密文是不一样的,这样导致互相之间密文无法使用。于是决定使用C/C++完成加密解...

whoisliang
2018/01/25
0
0
JSON-lib框架,转换JSON、XML

Json-lib可以将Java对象转成json格式的字符串,也可以将Java对象转换成xml格式的文档,同样可以将json字符串转换成Java对象或是将xml字符串转换成Java对象。 一、 准备工作 1、 首先要去官方...

五大三粗
2015/11/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Windows 上安装 Scala

在安装 Scala 之前需要先安装 Java 环境,具体安装的详细方法就不在这里描述了。 您可以自行搜索我们网站中的内容获得其他网站的帮助来获得如何安装 Java 环境的方法。 接下来,我们可以从 ...

honeymose
今天
1
0
数据库篇多表操作

第1章 多表操作 实际开发中,一个项目通常需要很多张表才能完成。例如:一个商城项目就需要分类表(category)、商品表(products)、订单表(orders)等多张表。且这些表的数据之间存在一定的关系...

stars永恒
今天
3
0
nginx日志自动切割

1.日志配置(Nginx 日志) access.log----记录哪些用户,哪些页面以及用户浏览器,IP等访问信息;error.log------记录服务器错误的日志 #配置日志存储路径:location / {      a...

em_aaron
昨天
5
0
java 反射

基本概念 RTTI,即Run-Time Type Identification,运行时类型识别。RTTI能在运行时就能够自动识别每个编译时已知的类型。   要想理解反射的原理,首先要了解什么是类型信息。Java让我们在运...

细节探索者
昨天
2
0
推荐转载连接

https://www.cnblogs.com/ysocean/p/7409779.html#_label0

小橙子的曼曼
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部