最近在做项目时遇到这样一个需求:依次读取本地文件夹里所有文件的内容,转为JSON,发送到ActiveMQ的消息队列, 然后从MQ的消息队列上获取文件的信息,依次写到本地。常见的文件类型,比如.txt 和.png等文件的读写并不难。但是,我刚才所提到的需求,如果用常规的方法去读写,比如按字节读取文件内容,转为字符串,再转为JSON发送到MQ的队列,然后从MQ获取原文件信息写到文件,就会发现写出来的文件和文件不一样。我的解决方法是:按字节读取原文件,转为字节数组,将字节数组转为Base64编码格式的字符串,然后转为JOSN发送到MQ,然后从MQ获取到JOSN,将文件内容通过Base64解码为字符数组,写文件到某个路径。以下为代码:测试类 Test.class/*** @Desc: 测试类* @Date: 2016/7/1* @Version: 1.0* @Author: lzy*/
public class Test {public static void main(String[] args){String fileName="JUBE99EGRR311800";           //文件名:测试文件是没有后缀名的二进制String fileReadPath="d:/read/";               //文件所在文件夹String filePath=fileReadPath+fileName;        //文件路径//工具类FileUtil fileUtil=new FileUtil();//按字节读取文件内容,并转换为Base64编码字符串String fileJsonStr=fileUtil.fileToJson(fileName,filePath);//文件内容Base64解码,按字节写文件fileUtil.writeFile(fileJsonStr,"d:/write/");}
}123456789101112131415161718192021222324FileUtil.class 文件转换工具类/*** @Desc: 文件内容转换工具类* @Date: 2016/7/1* @Version: 1.0* @Author: lzy*/public class FileUtil {/*** 文件内容转为 Base64 编码的 JSON* @param fileName 文件名* @param filePath 文件路径* @return*/public String fileToJson(String fileName,String filePath){String fileContentJson="";      //文件内容转JSONtry {if(null!=filePath && !filePath.equals("")){if(null!=fileName && !fileName.equals("")){//将文件内容转为字节数组byte[] fileByte=toByteArray(filePath);//将字节数组转为Base64编码String fileContent=ByteToBase64(fileByte);FileEntity fileEntity=new FileEntity();fileEntity.setFileName(fileName);fileEntity.setFileContent(fileContent);//实体转JSONfileContentJson = FileEntitytoJSON(fileEntity);}}}catch (Exception e){Log.error("fileToJson error",e);}return fileContentJson;}/*** 将文件转成字节数组* @param filePath* @return*/public byte[] toByteArray(String filePath){ByteArrayOutputStream bos=null;BufferedInputStream in = null;try {File f = new File(filePath);if(f.exists()){in = new BufferedInputStream(new FileInputStream(f));bos = new ByteArrayOutputStream((int) f.length());int buf_size = 1024;byte[] buffer = new byte[buf_size];int len = 0;while (-1 != (len = in.read(buffer, 0, buf_size))) {bos.write(buffer, 0, len);}//return bos.toByteArray();}} catch (IOException e) {Log.error("toByteArray() Exception", e);} finally {try {in.close();bos.close();} catch (IOException e) {Log.error("toByteArray() Exception",e);}}return bos.toByteArray();}/*** Base64加密* @param b* @return*/public String ByteToBase64(byte[] b) {String str="";if(null!=b){BASE64Encoder encoder = new BASE64Encoder();str=encoder.encode(b);}return str;}/*** Base64解密* @param str* @return*/public byte[] Base64toByte(String str) {byte[] b = new byte[0];BASE64Decoder decoder = new BASE64Decoder();try {if(null!=str && !str.equals("")){b = decoder.decodeBuffer(str);}} catch (IOException e) {Log.error("Base64toByte() Exception",e);}return b;}/*** 实体转JSON* @param fileEntity* @return*/public String FileEntitytoJSON(FileEntity fileEntity) {String str="";if(null!=fileEntity){JSONObject json = JSONObject.fromObject(fileEntity);str = json.toString();}return str;}/*** JSON转实体* @param msg* @return*/public FileEntity JSONtoFileEntity(String msg) {FileEntity fileEntity=new FileEntity();if(null!=msg && !msg.equals("")){JSONObject obj = new JSONObject().fromObject(msg);fileEntity = (FileEntity) JSONObject.toBean(obj, FileEntity.class);}return fileEntity;}/*** 写文件* @param fileJson json* @param filePath 文件路径*/public void writeFile(String fileJson,String filePath){FileOutputStream fos=null;try{if(null!=fileJson && !fileJson.equals("")){if(null!=filePath && !filePath.equals("")){//json转为文件实体FileEntity fileEntity=JSONtoFileEntity(fileJson);//Base64文件内容解码byte[] b=Base64toByte(fileEntity.getFileContent());File file=new File(filePath);if (!file.exists()) {file.mkdirs();}fos = new FileOutputStream(filePath + File.separator +fileEntity.getFileName());fos.write(b);}}}catch (Exception e){Log.error("write Exception:",e);}finally {try {fos.close();} catch (IOException e) {Log.error("fos.close() Exception:", e);}}}
}123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178FileEntity.class 文件实体类/*** @Desc:文件信息实体* @Date: 2016/6/29* @Version: 1.0* @Author: lzy*/
public class FileEntity {private String fileName;       //文件名private String fileContent;    //文件内容public String getFileName() {return fileName;}public void setFileName(String fileName) {this.fileName = fileName;}public String getFileContent() {return fileContent;}public void setFileContent(String fileContent) {this.fileContent = fileContent;}
}

java 按字节读写二进制文件(Base64编码解码)相关推荐

  1. java 二进制 base64编码_java 按字节读写二进制文件(Base64编码解码)

    最近在做项目时遇到这样一个需求:依次读取本地文件夹里所有文件的内容,转为JSON,发送到ActiveMQ的消息队列, 然后从MQ的消息队列上获取文件的信息,依次写到本地.常见的文件类型,比如.txt ...

  2. java svgbase64转byte_java 图片进行base64 编码解码

    java 图片进行base64 编码解码 刘振兴 代码分享 2017年06月07日 10555 2条评论 import sun.misc.BASE64Decoder; import sun.misc. ...

  3. Java工程中引用Base64编码解码小记

    Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一. Base64编码说明 Base64编码要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之后在6位的前面补两 ...

  4. Java Base64 编码解码方案总结

    转载自  Java Base64 编码解码方案总结 Base64是一种能将任意Binary资料用64种字元组合成字串的方法,而这个Binary资料和字串资料彼此之间是可以互相转换的,十分方便.在实际应 ...

  5. python使用base64编码解码数据

    python使用base64编码解码数据 base64模块是用来作base64编码解码,常用于小型数据的传输.编码后的数据是一个字符串,其包括a-z.A-Z.0-9./.+共64个字符,即可用6个字节 ...

  6. 一些Base64编码/解码及数据压缩/解压方面的知识

    一.Base64编码/解码 一般用到的是Delphi自带的单元EncdDecd,当然还有第三方提供的单元或控件,其中我所接触到的认为比较好的有Indy的TIdMimeEncode / TIdMimeD ...

  7. base64编码解码讲解

    一.base64 base64是一种对字符通过二进制进行编码解码转换的一种编码算法,便于在不同环境间通信,规避了乱码的出现. base64算法: 1->字符串转换为三个字节一组,不足三个字节时用 ...

  8. js实现Base64编码解码

    js实现标准的Base64编码解码 Base64 是使用64个可打印ASCII字符(A-Z.a-z.0-9.+./)将任意字节序列数据编码成ASCII字符串,另有"="符号用作后缀 ...

  9. Delphi Base64编码/解码及ZLib压缩/解压

    最近在写的程序与SOAP相关,所以用到了一些Base64编码/解码及数据压缩/解压方面的知识. 在这里来作一些总结: 一.Base64编码/解码 一般用到的是Delphi自带的单元EncdDecd,当 ...

最新文章

  1. [BZOJ2429][HAOI2006]聪明的猴子(最小生成树)
  2. .classpath文件有什么用_干货分享:Windows目录结构剖析,C盘目录常见文件夹都有什么用?...
  3. python 之 __new__ 方法理解
  4. 一道滴滴的产品面试题
  5. 3-29Pytorch与autograd梯度与机器学习
  6. MTK 驱动(85)----RPMB key introduction
  7. SQLAlchemy types
  8. FFT分析的加窗和重叠
  9. 剑指offer面试题54. 二叉搜索树的第k大节点(逆中序遍历)
  10. go语言阶段综合练习--家庭收支软件的示例--过程版本
  11. 如何php只输入数字和字母,php 不用字母、数字和下划线写 shell
  12. R语言查找指定值的位置(行列)1
  13. cmd如何返回上一级目录,如何进入其他文件目录
  14. noob_CSS:从Noob到Ninja
  15. AndroidStudio 设置全局查找快捷键
  16. CentOS7和CentOS8 Asterisk 20.0.0 简单图形化界面7--对接讯时FXO网关落地
  17. 安卓实现饿了么点餐界面效果(京东类别左右列表联动)
  18. 计算机考研各科复习时间规划,2020考研科学复习时间表,985学长强力推荐!
  19. 数开头的成语有哪些_一至十数字开头的成语有哪些?
  20. Ubuntu18.04新手架设网站全过程

热门文章

  1. springboot 常用插件
  2. 十分钟搞定CSS选择器
  3. 对WebBrowser控件设置代理
  4. 配置Voice vlan
  5. 谷歌Chrome 紧急修复已遭利用的两个0day
  6. 手把手教你详细分析 Chrome 1day 漏洞 (CVE-2021-21224)
  7. 佳明或已支付勒索金,获得 WastedLocker的解密密钥
  8. 谈谈lucene的DocValues特性之SortedNumericDocValuesField
  9. ASP.NET页面生命周期概述
  10. mysql数据库中,查看数据库的字符集(所有库的字符集或者某个特定库的字符集)...