文档章节

java 将文件流转化成字符串传输

有梦为嘛
 有梦为嘛
发布于 2016/08/09 16:45
字数 458
阅读 61
收藏 0
点赞 0
评论 0

1. 需要文件转换成字节数组。

2. 将字节数组转换成字符串,不过需要注意的是需要将字节数组使用Base64加密,这样防止传输过程中因为编码问题导致文件损坏的问题。

3. 接收方将字符串转化成字节数组,再使用Base64解密,再输出到文件就OK了。

下面贴上代码: 

   /**
	 * summary:将字符串存储为文件 采用Base64解码
	 * @param fileStr
	 * @param outfile
	 * </pre>
	 */
	public static void streamSaveAsFile(InputStream is, String outFileStr) {
		FileOutputStream fos = null;
		try {
			File file = new File(outFileStr);
			BASE64Decoder decoder = new BASE64Decoder();
			fos = new FileOutputStream(file);
			byte[] buffer = decoder.decodeBuffer(is);
			fos.write(buffer, 0, buffer.length);
		} catch (Exception e) {
			e.printStackTrace();
			throw new RuntimeException(e);
		} finally {
			try {
				is.close();
				fos.close();
			} catch (Exception e2) {
				e2.printStackTrace();
				throw new RuntimeException(e2);
			}
		}
	}

	/**
	 * 
	 * <pre>
	 * summary:将字符串存储为文件    
	 * @param fileStr
	 * @param outfile
	 * </pre>
	 */
	public static void stringSaveAsFile(String fileStr, String outFilePath) {
		InputStream out = new ByteArrayInputStream(fileStr.getBytes());
		FileStrUtil.streamSaveAsFile(out, outFilePath);
	}

	/**
	 * 将流转换成字符串 使用Base64加密
	 * 
	 * @param in输入流
	 * @return
	 * @throws IOException
	 */
	public static String streamToString(InputStream inputStream) throws IOException {
		byte[] bt = toByteArray(inputStream);
		inputStream.close();
		String out = new sun.misc.BASE64Encoder().encodeBuffer(bt);
		return out;
	}
	
	/**
	 * 将流转换成字符串
	 * 
	 * @param in输入流
	 * @return
	 * @throws IOException
	 */
	public static String fileToString(String filePath) throws IOException {
		File file = new File(filePath);
		FileInputStream is = new FileInputStream(file);
		String fileStr = FileStrUtil.streamToString(is);
		return fileStr;
	}

	/**
	 * <pre>
	 * summary:将流转化为字节数组  
	 * @param inputStream
	 * @return
	 * @throws IOException
	 * </pre>
	 */
	public static byte[] toByteArray(InputStream inputStream) throws IOException {
		ByteArrayOutputStream out = new ByteArrayOutputStream();
		byte[] buffer = new byte[1024 * 4];
		byte[] result = null;
		try {
			int n = 0;
			while ((n = inputStream.read(buffer)) != -1) {
				out.write(buffer, 0, n);
			}
			result = out.toByteArray();
		} catch (Exception e) {
			e.printStackTrace();
			throw new RuntimeException(e);
		} finally {
			out.close();
		}
		return result;
	}
	
	
	public static void main(String[] args) throws Exception {
		String fromPath = "F:\\fileupload\\aaa.docx";
		String toPath = "C:\\Users\\Desktop\\aaaa.docx";
		String fileStr = FileStrUtil.fileToString(fromPath);
		FileStrUtil.stringSaveAsFile(fileStr, toPath);
	}

 

© 著作权归作者所有

共有 人打赏支持
有梦为嘛
粉丝 0
博文 4
码字总数 1056
作品 0
西安
程序员
ZK7.0.3中从MongoDB下载文件

问题 在完成Spring从MongoDB中下载文件之GridFS之后,现在需要在ZK7.0.3的ViewModel中下载该文件。 思路 先从MongoDB获取到,以及把转化为ZK的Filedownload能够使用的进行文件下载。 实现 导...

亚林瓜子 ⋅ 06/12 ⋅ 0

关于Java编程基础学习输入输出IO的问题

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

Java小辰 ⋅ 05/23 ⋅ 0

MyCAT PreparedStatement 重新入门

概述 相信很多同学在学习 JDBC 时,都碰到 和 。究竟该使用哪个呢?最终很可能是懵里懵懂的看了各种总结,使用 。那么本文,通过 MyCAT 对 的实现对大家能够重新理解下。 本文主要分成两部分...

wangchen1999 ⋅ 05/02 ⋅ 0

做几道基础的Java测试题,看看最近有进步吗?欢迎来学习

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

启示录是真的 ⋅ 05/24 ⋅ 0

Java序列化技术即将被废除!!!

我们的对象并不只是存在内存中,还需要传输网络,或者保存起来下次再加载出来用,所以需要Java序列化技术。Java序列化技术正是将对象转变成一串由二进制字节组成的数组,可以通过将二进制数据...

Java技术栈 ⋅ 05/30 ⋅ 0

JNI开发流程与引用数据类型的处理

今天我们来看下Java JNI,先看下维基百科给的定义, JNI, Java Native Interface, Java本地接口,是一种编程框架,使得Java虚拟机中的Java程序可以调用本地应用或库,也可以被其他程序调用。...

juexingzhe ⋅ 05/04 ⋅ 0

Elasticsearch入门实践

一. 系统环境 操作系统:CentOS release 6.8 (Final) ES版本:6.1.1 二. 安装 先确认安装了Java运行时环境: 解压ES压缩包: 三. 启动 1. 启动ES单节点 当然,对于在后台以守护进程模式运行的...

哲别0 ⋅ 06/06 ⋅ 0

Maven的安装文字版(Windows/Linux/Mac)

以下内容引用自https://ayayui.gitbooks.io/tutorialspoint-maven/content/book/mavenenvironment_setup.html,安装信息更新到最新版本: Maven是基于Java的工具,所以首要必须的要求是你的电...

easonjim ⋅ 2017/05/07 ⋅ 0

热修复与插件化基础——Java与Android虚拟机

一、Java虚拟机(JVM) 1、JVM整体结构 使用javac将java文件编译成class文件。 类加载器(ClassLoader)将class字节码加载进JVM对应的内存中。 JVM将内存分配给方法区、堆区、栈区、本地方式...

CSDN_LQR ⋅ 05/13 ⋅ 0

用Java这么多年,这些秘密你知道吗?

摘要: 如果您是Java开发人员,那么这些问题可能会让您在某个时刻头痛不已。继续阅读以了解如何处理这5个棘手的秘密。 Java是一个拥有悠久历史的大型语言。在二十多年的时间里,语言中蕴含着...

James- ⋅ 05/11 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

中标麒麟(龙芯版)7.0优盘安装

########################################## 制作U盘安装盘: 1.准备U盘: PMON环境下U盘必须格式化成ext3; 昆仑固件环境下可以格式化成ext3,ext4 2.把整个镜像 xxx.iso 复制到U盘下面 3....

gugudu ⋅ 4分钟前 ⋅ 0

老司机写的大数据建模五步走

本文将尝试来梳理一下数据建模的步骤,以及每一步需要做的工作。 01 第一步:选择模型或自定义模式 这是建模的第一步,我们需要基于业务问题,来决定可以选择哪些可用的模型。 比如,如果要预...

gulf ⋅ 13分钟前 ⋅ 0

PacificA 一致性协议解读

PacificA 的 paper 在 08 年左右发出来的,比 Raft 早了 6,7 年。 在 PacificA 论文中,他们强调该算法使用范围是 LAN (Local Area Network),讲白了就是对跨机房不友好。 不管是 ZAB,Raf...

黑客画家 ⋅ 15分钟前 ⋅ 0

盘符图标个性化

设置自己的专属盘符图标 准备ico格式的图片文件一个,在根目录下创建autorun.inf文件 文件内容 [Autorun]icon=logo.ico 重新启动或者插拔U盘即可看到结果...

阿豪boy ⋅ 15分钟前 ⋅ 0

Windows下QQ聊天记录中图片的默认存放位置

Windows下QQ聊天记录中图片的默认存放位置在设置中是没有说明的。 实测位置在:D:\Documents\Tencent Files\974101467\Image 其中: “974101467”为对应的QQ号; “C2C”为个人之间的聊天图...

临江仙卜算子 ⋅ 22分钟前 ⋅ 0

GC 的三种基本实现方式

参考资料《代码的未来》(作者: [日] 松本行弘)。 由于并非本人原著(我只是个“搬运工“),SO 未经本人允许请尽情转载。 另外个人像说明一下这里所说的GC指泛指垃圾回收机制,而单指Jav...

xixingzhe ⋅ 23分钟前 ⋅ 0

Android双击退出

/** * 菜单、返回键响应 */ @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO Auto-generated method stub if(keyCode......

王先森oO ⋅ 27分钟前 ⋅ 0

idea 整合 vue 启动

刚学习Vue 搭建了一个项目 只能命令启动 Idea里面不会启动 尝试了一下修改启动的配置 如下: 1.首先你要保证你的package.json没有修改过 具体原因没有看 因为我改了这个name的值 就没办法启动...

事儿爹 ⋅ 32分钟前 ⋅ 0

redis在windows环境的后台运行方法

在后台运行,首先需要安装redis服务,命令为 redis-server.exe --service-install redis.windows.conf --loglevel verbose 启动,命令为 redis-server --service-start 停止,命令为 redis-...

程序羊 ⋅ 36分钟前 ⋅ 0

比特币现金开发者提出新的交易订单规则

本周,四位比特币现金的四位开发者和研究员:Joannes Vermorel(Lokad),AmaurySéchet(比特币ABC),Shammah Chancellor(比特币ABC)和Tomas van der Wansem(Bitcrust)共同发表了一篇关...

lpy411 ⋅ 39分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部