文件输入输出流和字节数组输入输出流结合使用

文件通过文件输入流,以程序为中转,程序通过字节数组输出流写入字节数组
通过字节数组输入流将字节数组读到程序中,然后通过文件输出流在还原为文件。
以程序为中心
1.图片转为字节数组
2.将字节数组还原为文件

public class TestCombine {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		byte[] datas=fileToByteArray("copy.jpg");
		
		byteArrayToFile(datas,"copy_byte.jpg");
	}

	
	/**
	 * 1.图片转为字节数组
	 * 图片到程序FileInputStream
	 * 程序到数组 ByteArrayOutputStream
	 */
	public static byte[] fileToByteArray(String FilePath){
				//1.创建源与目的的
				File src=new File(FilePath);
				byte[] dest=null;//在字节数组输出的时候是不需要源的。
				
				
				//2.选择流,选择文件输入流
				InputStream is=null;//方便在finally中使用,设置为全局变量
				ByteArrayOutputStream os=null;//新增方法
				
				try {
					
					is=new FileInputStream(src);
					os=new ByteArrayOutputStream();
					//3.操作,读文件
					byte[] flush=new byte[1024*10];//10k,创建读取数据时的缓冲,每次读取的字节个数。
					int len=-1;//接受长度;
					while((len=is.read(flush))!=-1) {
						//表示当还没有到文件的末尾时
						//字符数组-->字符串,即是解码。
						os.write(flush,0,len);//将文件内容写出字节数组
						
					}
					os.flush();
					return os.toByteArray();
				} catch (FileNotFoundException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}finally {
					//4.释放资源
						try {
							if(is!=null) {//表示当文打开时,才需要通知操作系统关闭
							is.close();
							}
						} catch (IOException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
						
					}
				return null;
					
				}
				

	
	
	
	/**
	 *2.将字节数组还原为文件
	 * 字节数组到程序ByteArrayInputStream
	 * 程序到文件。FileOutputStream
	 */
	
	public static void byteArrayToFile(byte[] src,String FilePath){
				//1.创建源
				File dest=new File(FilePath);//该文件是不存在的,会在相应的路径下创建
				
				// 2.选择流
				FileOutputStream os=null;
				ByteArrayInputStream is=null;
				
				try {
					//3.操作
					os=new FileOutputStream(dest);
					is=new ByteArrayInputStream(src);
					//将内容写出
					byte[] flush=new byte[1024*10];//创建读取数据时的缓冲,每次读取的字节个数。
					int len=-1;//接受长度;
					while((len=is.read(flush))!=-1) {
						//表示当还没有到文件的末尾时
						//字符数组-->字符串,即是解码。
						os.write(flush,0,len);//
						
					}
					os.flush();
				}catch(FileNotFoundException e){
					e.printStackTrace();
					
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}finally {
					//4.释放资源
					try {
						if (null != os) {
							os.close();
						} 
					} catch (Exception e) {
						// TODO: handle exception
					}
				}
	}
}

你可能感兴趣的:(java学习)