【Java文件操作(六)】借助内存复制图片:ByteArrayOutputStream\ByteArrayInputStream\FileOutputStream\FileInputStream辨析

我的博客——Java文件操作系列

【Java文件操作(一)】递归打印文件目录

【Java文件操作(二)】删除文件夹,但保留其内部文件

【Java文件操作(三)】递归复制文件夹内所有文件

【Java文件操作(四)】递归套递归,计算每个文件夹大小

【Java文件操作(五)】从txt文件中读取字符串、乱码原因

【Java文件操作(六)】借助内存复制图片:ByteArrayOutputStream\FileOutputStream等辨析

【Java文件操作(七)】序列化:将自定义类写入文件

【Java 编码转换】将汉字转化为gb2312编码


功能

借助内存复制图片,读文件和写文件的结合。使用了:

ByteArrayOutputStream\ByteArrayInputStream\FileOutputStream\FileInputStream

  • 两个步骤:
  • (硬盘中)图片 -> (内存中)字节数组
  • (内存中)字节数组 -> (硬盘中)图片

总结&易错点:

  • 对于文件File来说:

  • 写出到FileFileOutputStream从File读取FileInputStream

  • 对于字节数组ByteArray来说:

  • 写出到ByteArrayByteArrayOutputStream从ByteArray读取ByteArrayInputStream

代码

package cn.hanquan.test;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/*	--------------------借助内存复制图片--------------------
 * 
 * 	两个步骤:
 * 		(硬盘中)图片 -> (内存中)字节数组
 * 		(内存中)字节数组 -> (硬盘中)图片
 * 
 * 	总结&易错点:
 * 	对于文件File来说,写出到File用FileOutputStream,从File读取用FileInputStream
 * 	对于字节数组ByteArray来说,写出到ByteArray用ByteArrayOutputStream,从ByteArray读取用ByteArrayInputStream
 */
public class FileOutputStreamTest {

	public static String fromSRC = "C:\\Users\\Bug\\Desktop\\College Files\\壁纸\\666.jpg";
	public static String toSRC = "C:\\Users\\Bug\\Desktop\\test.jpg";

	public static void main(String[] args) throws IOException {
		byte[] datas;
		
		datas = fileToByteArray(fromSRC);
		byteArrayToFile(toSRC, datas);
	}

	// (硬盘中)图片 -> (内存中)字节数组
	public static byte[] fileToByteArray(String filePath) throws IOException {
		// 创建源与目的地
		File fromfile = new File(fromSRC);
		// 选择流
		FileInputStream instream = new FileInputStream(fromfile);
		ByteArrayOutputStream outstream = new ByteArrayOutputStream();
		// 操作
		byte[] flush = new byte[1024 * 10];
		int len = -1;
		while ((len = instream.read(flush)) != -1) {
			outstream.write(flush, 0, len);
		}
		// 关闭流
		outstream.flush();
		instream.close();
		return outstream.toByteArray();
	}

	// (内存中)字节数组 -> (硬盘中)图片
	public static void byteArrayToFile(String filePath, byte[] bytearray) throws IOException {
		// 创建源
		File tofile = new File(filePath);
		// 选择流
		ByteArrayInputStream instream = new ByteArrayInputStream(bytearray);
		FileOutputStream outstream = new FileOutputStream(tofile);
		// 操作
		byte[] flush = new byte[1024 * 10];
		int len = -1;
		while ((len = instream.read(flush)) != -1) {
			outstream.write(flush, 0, len);
		}
		// 关闭流
		outstream.close();
	}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值