本例主要是将.zip的压缩文件,转换成string类型,进数据传送。有的读者要问干嘛不用stream流呢,可以用流,现在不支持流又该怎么弄呢,可以用byte[],那byte[]也不支持呢,那就乖乖用String吧。

主要思想是通过byte[]将文件类型转换成String类型,有以下几种方式:

注意:不要直接toString()

方法一:

byte[]转String

byte[] temp = new byte[1024];
int b;
while ((b = fis.read(temp)) != -1) {
outstream.write(temp, 0, b);
}
String转byte[]
fileStr.getBytes("ISO-8859-1")

方法二:

BASE64Encoder encoder = new BASE64Encoder();
while ((b = inputstream.read(temp)) != -1) {
fileStr+= encoder.encode(temp);
 }
String转byte[]
BASE64Decoder decoder = new BASE64Decoder();
byte[] appByte = decoder.decodeBuffer(fileStr);
 ftpOutstream.write(appByte);

方法三:

读者自己写转换吧

本编博客以支付宝的电子对账单为例,奇怪的是电子对账单直接用支付宝流转成string,居然出错,最后一个文件错误,大小不变文件却缺失,没办法只能先保存在本地,然后读取本地文件流,用完再删除了,代码在下面↓↓↓↓↓↓↓↓↓↓↓↓

package com.pay;import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.zip.ZipOutputStream;
import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSONObject;
import org.codehaus.jackson.map.ObjectMapper;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayDataDataserviceBillDownloadurlQueryRequest;
import com.alipay.api.response.AlipayDataDataserviceBillDownloadurlQueryResponse;
import com.log.AppLogUtil;
import com.service.ReceiverHandler;/*** @author muyunfei* * <p>Modification History:</p> * <p>QQ       Author      Description</p>* <p>------------------------------------------------------------------</p>* <p>1147417467           牟云飞                新建</p>*/
public class AliZipDemo{/*** 获得对账单数据流(.zip),并将.zip通过byte[]保存成string进行传送* String获得后转成byte[],然后保存成.zip*/public String sendZipByStr() {try{String aliGateWay="https://openapi.alipay.com/gateway.do";//支付宝网关String dateStr="2016-09-09";//日期  以天为最低单位  2016-09-06String appId="***********";//appid//商户私钥String privateKey="********************************************************";String strType="json";//数据格式String chartType="utf-8";//编码格式//支付宝公钥String aliPublicKey="************************************************";AlipayClient alipayClient = new DefaultAlipayClient(aliGateWay,appId,privateKey,strType,chartType,aliPublicKey);AlipayDataDataserviceBillDownloadurlQueryRequest request = new AlipayDataDataserviceBillDownloadurlQueryRequest();request.setBizContent("{" +"    \"bill_type\":\"trade\"," +"    \"bill_date\":\""+dateStr+"\"" +"  }");AlipayDataDataserviceBillDownloadurlQueryResponse response = alipayClient.execute(request);//获得下载对账单地址System.out.println(response.getBillDownloadUrl());System.out.println(response.getCode());System.out.println(response.getMsg());if(response.isSuccess()){//调用成功,下载对账文件String urlStr=response.getBillDownloadUrl();try {//创建文件链接
//                  URL url = new URL("https://zos.alipayobjects.com/rmsportal/sDdxhkwUKuHUDLe.png");URL url = new URL(urlStr);HttpURLConnection httpUrlConnection = (HttpURLConnection) url.openConnection();//设置链接参数httpUrlConnection.setConnectTimeout(5 * 1000);httpUrlConnection.setDoInput(true);//打开输入输出流httpUrlConnection.setDoOutput(true);httpUrlConnection.setUseCaches(false);httpUrlConnection.setRequestMethod("GET");httpUrlConnection.setRequestProperty("Charsert", "UTF-8");httpUrlConnection.setRequestProperty("Connection", "Keep-Alive");  //建立链接httpUrlConnection.connect();//获得输入流,文件为zip格式,//支付宝提供//20886126836996110156_20160906.csv.zip内包含//20886126836996110156_20160906_业务明细.csv//20886126836996110156_20160906_业务明细(汇总).csvInputStream fis = httpUrlConnection.getInputStream();//从url中获得文件名downloadFileName=20886126836996110156_20160909.csv.zip//直接将流转换成字符串出现zip内最后一个文件异常,只能先保存到本地,然后进行转换String filename=getDownloadFileName(urlStr);File file = new File(filename+".zip");FileOutputStream outstream = new FileOutputStream(file);//将获得数据流转换成byte,然后转成String,向内网传送byte[] temp = new byte[1024];int b;while ((b = fis.read(temp)) != -1) {
//                      fileStr+=byte2hex(temp);
//                      fileStr+=new String(temp,"ISO-8859-1");outstream.write(temp, 0, b);}outstream.flush();outstream.close();fis.close();//获取本地文件转换成字符换File file2 = new File(filename+".zip");FileInputStream inputstream=new FileInputStream(file2);//本地文件的输入流String fileStr="";//内网传送数据,file的转byte的字符串BASE64Encoder encoder = new BASE64Encoder();while ((b = inputstream.read(temp)) != -1) {fileStr+= encoder.encode(temp);}inputstream.close();System.out.println("文件1:"+fileStr);//删除本地文件file2.delete();//测试保存文件File ftpfile=new File("G:/"+filename+"2222222222222.zip");FileOutputStream ftpOutstream = new FileOutputStream(ftpfile);BASE64Decoder decoder = new BASE64Decoder();byte[] appByte = decoder.decodeBuffer(fileStr);ftpOutstream.write(appByte);//                 outstream.write(fileStr.getBytes("ISO-8859-1"));ftpOutstream.flush();ftpOutstream.close();System.out.println("ok");//成功向内网传送return "{\"code\": 1,\"result\": \""+fileStr+"\"}";} catch (Exception e) {AppLogUtil.getAppLoger().error("从支付宝获取对账单,根据对账单地址获取对账单异常:" + e.getMessage()); e.printStackTrace();return createErrorMsg("fail").toString();} } else {AppLogUtil.getAppLoger().error("从支付宝获取对账单,获取对账单地址失败"); return createErrorMsg("fail").toString();}}catch(Exception e){AppLogUtil.getAppLoger().error("从支付宝获取对账单,获取对账单地址失败:" + e.getMessage()); e.printStackTrace();return createErrorMsg("fail").toString();}}/*** 生成错误信息* @param msg* @return*/private JSONObject createErrorMsg(String msg){String error="{\"code\": 1,\"result\": \""+msg+"\"}";return JSONObject.fromObject(error) ;}
<span style="white-space:pre"> </span>//获取文件名private String getDownloadFileName(String urlStr){String tempStr = urlStr.substring(urlStr.indexOf("downloadFileName")+17, urlStr.length());tempStr = tempStr.substring(0,tempStr.indexOf(".zip"));return tempStr;}}

将.zip文件转换成字符串进行传送(以支付宝对账单为例)相关推荐

  1. 将.zip文件转换成字符串进行传送(以支付宝对账单为例

    转载自:http://blog.csdn.net/myfmyfmyfmyf/article/details/52517187 本例主要是将.zip的压缩文件,转换成string类型,进数据传送.有的读 ...

  2. XML文件转换成字符串互相转换操作

    System.Xml.XmlDocument doc = new System.Xml.XmlDocument();//新建对象 doc.Load("filePath");//XM ...

  3. python excel文件转换成字符串_python利用pandas将excel文件转换为txt文件的方法

    python将数据换为txt的方法有很多,可以用xlrd库实现.本人比较懒,不想按太多用的少的插件,利用已有库pandas将excel文件转换为txt文件. 直接上代码: ''' function:将 ...

  4. 将文件转换成二进制,再由二进制转换成文件

    //首先引入命名空间 using System.IO; protected void Page_Load(object sender, EventArgs e){//调用以下两个方法进行转换strin ...

  5. 怎样将英文html文件转换成中文乱码,解决html导出pdf中文乱码问题的正确姿势

    简介 jspdf是歪果仁开发的,因此在一开始就没想过支持非英文以外的文字,这就导致了非英文的文本都是乱码. 因此就有其他大佬给增加了其他解决方案,到了1.5版本也正式加入了非英文支持的解决方案. 解决 ...

  6. bat脚本中获取上级目录_使用Python写一个可以监控Tomcat 运行的脚本,并且把.py文件转换成.exe文件...

    使用Python写一个可以监控Tomcat 运行的脚本,并且把.py文件转换成.exe文件 文章来源与博主本人的CSDN博客,博客地址:https://blog.csdn.net/weixin_435 ...

  7. python文件转换成jar包_Python一键转Jar包,Java调用Python新姿势!

    粉丝朋友们,不知道大家看故事看腻了没(要是没腻可一定留言告诉我^_^),今天这篇文章换换口味,正经的来写写技术文.言归正传,咱们开始吧! 今天的这篇文章,聊一个轩辕君之前工作中遇到的需求:如何在Jav ...

  8. oracle转换成字符型,Oracle中将Clob字段转换成字符串

    1. 利用dbms_lob.substr()方法可将对应字段转换成字符串如下 select dbms_lob.substr(content) from NEWS 该方法有个缺点,当content字段长 ...

  9. ip地址转换成字符串

    from://http://hi.baidu.com/hst_jiangbo/item/2a66d8eadeacb3215b2d643a 从网络上接收的ip地址,有时候为了节省空间,用一个32位无符号 ...

最新文章

  1. convertViewsetTag方法的一点理解
  2. 商汤联手华科:提出文字检测模型GNNets,新颖模块可解决几何分布难题
  3. 京东主图怎么保存原图_京东自营怎么做?详解京东平台操作方法
  4. CSS进阶(7)—— 内联元素的掌管者line-height和vertical-align(上)
  5. java jxl map,jxl操作Excel
  6. java如何造假数据_JAVA时间数据造假
  7. HBase性能优化总结
  8. JBox2D和JavaFX:事件与力量
  9. 砂.随笔.二十.微笑
  10. Python3.5安装与ChatterBot聊天机器人使用
  11. 杭电2151 Worm dp
  12. oracle时间差转换成小时分钟,oracle 时间差 具体到天:小时:分
  13. 各种厂商打开bios按键总汇
  14. 融合非负矩阵分解和图全变分的歌曲推荐算法
  15. linux 自动ping脚本,ping自动报警shell脚本forlinux
  16. 稀疏分解中的MP与OMP算法
  17. Python下载所有XKCD漫画
  18. 解决eclipse桌面快捷方式打不开的问题
  19. 企业如何CRM管理软件中受益
  20. 简单的复习下箭头函式

热门文章

  1. linux8怎么添加中文输入法,CentOS 8更改语言和安装中文输入法记录
  2. 黑莓物流解决方案BlackBerry Logistics solution
  3. 什么样的网站可以作为百科词条的参考文献?
  4. javascript 几句话快速找出字符串内指定字符的下标。
  5. Android Studio学习记录之简单的页面切换及宫格菜单
  6. 大胆预测下未来5年的Web开发
  7. layui(八)——轮播图常见用法总结
  8. PHP 代码实现表单数据验证类 整理的各种情况
  9. 家用什么牌子的投影仪好?投影仪买哪个好
  10. 2019个税新玩法,写个代码对比