java --IO流 节点流练习代码

1.拼接路径

package cn.jbit.lesson.sep;

import java.io.File;

/**
 * IO路径
 * @author penny
 *
 */
public class PathDemo01 {

	public static void main(String[] args) {

		String path = "D:\\e- java\\T\\622K~~$WS5SR}9S~[E5JS5S.png";
		System.out.println(File.separator);
		
		//建议
		//1./
		path = "D:/e- java/T/622K~~$WS5SR}9S~[E5JS5S.png";
		System.out.println(path);
		//2.常量拼接
		path = "D:"+File.separator+"e- java"+File.separator+"T"+File.separator+"622K~~$WS5SR}9S~[E5JS5S.png";
		System.out.println(path);

	}

}

2.构造File对象的方法

package cn.jbit.lesson.sep;

import java.io.File;

/**
 * 构造器
 * @author MacBook
 *
 */
public class FileDemo02 {

	public static void main(String[] args) {
		String path = "D:/e- java/T/622K~~$WS5SR}9S~[E5JS5S.png";
		
		//1.构造File对象,
		File src = new File(path);
		System.out.println(src.length());
		
		//2.从父路径名字符串和子路径名字符串创建新的 File实例
		src = new File("D:/e- java/T","622K~~$WS5SR}9S~[E5JS5S.png");
		System.out.println(src.length());
		
		//3.从父抽象路径名和子路径名字符串创建新的 File实例
		src=new File(new File("D:/e- java/T"),"622K~~$WS5SR}9S~[E5JS5S.png");
		System.out.println(src.length());
		
	}

}

3.文件状态标准代码

package cn.jbit.lesson.sep;

import java.io.File;

/**
 * 文件状态标准代码
 * @author MacBook
 * 
 * 文件状态:
 * 1.不存在:exists
 * 2.存在
 * 		文件:isFile
 * 		文件夹:isDirectory
 * 	
 *
 */
public class FileStatus {

	public static void main(String[] args) {
		File src=new File("xxx");
		
		if(null==src || !src.exists()) {
			System.out.println("文件不存在");
		}else {
			if(src.isFile()) {
				System.out.println("文件操作!");
			}else {
				System.out.println("文件夹操作");
			}
		}

	}

}

4.createNewFile & delete

package cn.jbit.lesson.sep;

import java.io.File;
import java.io.IOException;

/**
 * createNewFile 创建文件
 * 注意:1.不能创建文件夹,只能创建文件
 * 		2.不存在才创建(返回true)
 * 		3.con是操作系统的设备名,不能正确的被创建
 * 
 * delete 删除已经存在的文件
 * @author MacBook
 *
 */
public class FileDemo03 {

	public static void main(String[] args) throws IOException {
		//创建新的文件
		File src = new File("D:/e- java/T/io.png");
		boolean flag = src.createNewFile();
		System.out.println(flag);
		
		//并不是文件夹,而是一个没有后缀的文件
		src = new File("D:/e- java/T");
		flag = src.createNewFile();
		System.out.println(flag);
		
		//删除
		flag = src.delete();
		System.out.println(flag);
		
		

	}

}

5.创建目录

package cn.jbit.lesson.sep;

import java.io.File;

/**
 * 创建目录
 * 1.mkdir():确保上级目录存在,不存在创建失败
 * 2.mkdirs():上级目录可以不存在,不存在一同创建
 * 推荐使用mkdirs
 * @author MacBook
 *
 */
public class DirDemo01 {

	public static void main(String[] args) {
		File dir = new File("D:/e- java/T/dir/test");
		//创建目录 mkdirs()
		boolean flag = dir.mkdirs();
		System.out.println(flag);
		
		//mkdir
		dir = new File("D:/e- java/T/dir/test01");
		flag = dir.mkdir();
		System.out.println(flag);

	}

}

6.下一级信息

package cn.jbit.lesson.sep;

import java.io.File;

/**
 * 列出下一级
 * 1、list():列出下级名称
 * 2、listFile():列出下级File对象
 * 3、listRoots():列出所有的盘符
 * @author MacBook
 *
 */
public class ListDemo01 {

	public static void main(String[] args) {
		File dir = new File("D:/e- java/T");
		
		//下级名称
		String[] subNames = dir.list();
		for(String s:subNames) {
			System.out.println(s);
		}
		
		//下级对象 listFile()
		File[] subFiles = dir.listFiles();
		for(File s:subFiles) {
			System.out.println(s);
		}
		
		//盘符
		File[] subRoots = dir.listRoots();
		for(File s:subRoots) {
			System.out.println(s.getAbsolutePath());
		}

	}

}

7.递归

(1)打印1-10的数

package cn.jbit.lesson.sep;
/**
 * 递归
 * @author MacBook
 *
 */
public class Dirdemo02 {

	public static void main(String[] args) {
		printTen(1);
	}	
		//打印1-10的数
		
	public static void printTen(int num) {
		//1.出口
		if(num>10) { //递归头;结束递归
			return;
		}
		
		System.out.println(num);
		printTen(num+1);//自己调用自己
	}

	

}

(2)使用递归查看文件目录

package cn.jbit.lesson.sep;

import java.io.File;

/**
 * 使用递归查看文件目录
 * @author MacBook
 *
 */
public class DirDemo03 {

	public static void main(String[] args) {
		File src = new File("D:/e- java/T");
		printName(src,1);

	}
	
	public static void printName(File src,int deep) {
		/**
		 * 目的是查看这个文件所有层的下级的名字
		 * 思路:先判断是不是存在
		 * 		 存在则判断是不是目录
		 * 		 如果是目录就可以进行递归
		 *
		 */
		
		//为了输出的时候显示出层次感 ,加入了这样的代码
		for(int i=0;i<deep;i++) {
			System.out.print("*");
		}
		
		
		System.out.println(src.getName());
		
		if(null ==src || !src.exists()) {
			System.out.println("不存在!");
			return;
		}else if(src.isDirectory()){  //判断是目录
			for(File s:src.listFiles()) {
				printName(s,deep+1);
			}
			
		}
		
		
	}

}

8.Byte

电脑:字节
人:字符
从字符->字节 叫做编码(encode)
从字节到字符叫解码(decode)

unicode 有定长和变长,定长是utf-16,统一2个字节,比较浪费空间,utf-16又分为utf-16BE(高字节低地址)和utf-16LE(低字节低地址);变长是utf-8,英文1个字节,中文3个字节。

ANSI: 是中文的WINDOWS系统中的GBK

package cn.jbit.lesson.sep;

import java.io.UnsupportedEncodingException;

/**
 * getBytes
 * @author MacBook
 *
 */
public class ByteDemo01 {

	public static void main(String[] args) throws UnsupportedEncodingException{
		//准备一个字符串
		String msg = "性命生命使命";
		//编码:字节数组
		byte[] datas = msg.getBytes();
//		System.out.println(datas.length);//18
//		
//		//编码其他字符集
//		datas = msg.getBytes("UTF-16LE");
//		System.out.println(datas.length);//12
//		
//		//编码其他字符集
//		datas = msg.getBytes("GBK");
//		System.out.println(datas.length);//12
//		

		//模拟服务远程传一个数组给我,要对其进行还原
		//解码 :从字节->字符
		//构造器解码
		//String(byte[] bytes, int offset, int length, Charset charset) 
		msg = new String(datas,0,datas.length,"utf-8");
		System.out.println(msg);
		
		/*
		 * 解码出现乱码,原因如下:
		 * 1)字节数不够
		 */
		msg = new String(datas,0,datas.length-2,"utf-8");
		System.out.println(msg);
		
		/*
		 * 2) 字符集不统一
		 */
		msg = new String(datas,0,datas.length,"gbk");
		System.out.println(msg);
		
		//注意:在进行编码的时候可以进行编制任何模式的字节码,但是在解码的时候必须与原有得格式保持一致,否则回出现乱码
	}

}

9.字节流和字符流(输入流)

在这里插入图片描述

(1)第一个程序, 不标准的写法(便于理解)

package cn.lesson.io;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

/**
 * 理解操作步骤:
 * 1.创建源 
 * 2.选择流
 * 3.操作(read \write)
 * 		注意:read读取数据时,如果数据不存在,则返回-1
 * 4.释放资源
 * 
 * @author MacBook
 *
 */
public class IoTest01 {
	public static void main(String[] args) {
		//1.创建源
		File src = new File("test.txt");
		
		
			
		
		
		//2.选择流
		try {
			InputStream is = new FileInputStream(src);
			
			//3.操作流(读取)
			int temp1 = is.read();
			int temp2 = is.read();
			int temp3 = is.read();
			int temp4 = is.read();
			System.out.println((char)temp1);
			System.out.println((char)temp2);
			System.out.println((char)temp3);
			System.out.println((char)temp4);
			
			//4.释放资源
			is.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}


}

(2)标准的写法

先修改循环,再将释放流的过程放到finally中去,最后将is的作用域提升上去。

package cn.lesson.io;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

/**
 * 理解操作步骤,标准:
 * 1.创建源 
 * 2.选择流
 * 3.操作(read \write)
 * 		注意:read读取数据时,如果数据不存在,则返回-1
 * 4.释放资源
 * 
 * @author MacBook
 *
 */
public class IoTest01 {
	public static void main(String[] args) {
		//1.创建源
		File src = new File("test.txt");
		
		//2.选择流
		InputStream is =null;
		
		
		
		try {
			is = new FileInputStream(src);
			//3.操作流(读取)
			int temp;
			while((temp=is.read())!=-1) {
				System.out.println((char)temp);
			}
		
		} 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();
			}
		}
	}


}

(3)分段读取(以下4个代码重要)

package cn.lesson.io;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

/**
 * 分段读取
 * @author MacBook
 *
 */
public class IoTest11 {

	public static void main(String[] args) {
		//1.创建源
		File src = new File("test.txt");
		//2.选择流
		InputStream is = null;
		try {
			is = new FileInputStream(src);
			
			//3.操作(分段读取)
			byte[] flush = new byte[1024*10*5];//1024表示1K,*10 就是10k,再*5,就是50K,不要将它们算出来,这样写好维护
			int len=-1;
		while((len= is.read(flush))!=-1) {
			String str = new String(flush,0,len);//解码
			System.out.println(str);
		}
		
		} 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();
			}
		

	}

}

10.输出流

注意:(1)OutPutStream中创建源的时候文件可以不存在,会帮助我们自动创建一个,但是InPutStream就必须要存在才能进行操作。
(2)可以再后面追加 true:直接再后面追加,false :从第一个开始追加(相当于修改)

package cn.lesson.io;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

/**
 * 操作步骤
 * 1.创建源
 * 2.选择流
 * 3.操作(write)
 * 4.释放资源
 * @author MacBook
 *
 */
public class IoTest16 {

	public static void main(String[] args) {
		//1.创建源
		File src = new File("out.txt");
		//2.选择流
		OutputStream os = null;
		try {
			os = new FileOutputStream(src,false);
			/*
			 * 3.操作(写入)
			 * 将字符串->字节,要编码
			 */
			//我们要写入的字符串
			String str = "io is so easy";
			//将字符串进行编码写入
			byte[] b = str.getBytes();//编码
			os.write(b,0,b.length );//写入
			os.flush();//养成刷新的好习惯
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			//4.释放
			if(os!=null) {
				try {
					os.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
		
	}	

}

11.复制

注意:先打开的流后关闭

package cn.lesson.io;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class CopyTest01 {

	public static void main(String[] args) {
		copy("out.txt","test12.txt");
	}
	
	public static void copy(String insrc,String outsrc) {
		//1.创建源
		File srcIn = new File(insrc);//文件存在的地方
		File srcOut = new File(outsrc);//文件要去的地方
		
		//2.选择流
		InputStream is =null;//输入流
		OutputStream os=null;//输出流
		
		try {
			is = new FileInputStream(srcIn);
			os = new FileOutputStream(srcOut);
			
			//3.操作(复制)读取 之后再输出
			
			//读取
			byte[] flush = new byte[1024];
			int temp= -1;
			while((temp = is.read(flush))!=-1) {
				//写出去
				os.write(flush, 0, flush.length);
				
			}
			os.flush();
			
			 
			
			
			
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			if(os!=null) {
				try {
					os.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			
			if(is!=null) {
				try {
					is.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
				
	}

}

12 .字符输入流

注意:字符输入流只能处理纯文本的文件,可以避免乱码的问题
代码和inputstream差不多,只需要修改选择流就行啦

package cn.lesson.io;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;

/**
 * 字符输入流
 * 1.创建源
 * 2.选择流
 * 3.操作(read\write)
 * 4.释放资源
 * @author MacBook
 *
 */
public class IoTestRead01 {

	public static void main(String[] args) {
		//1.创建源
		File src = new File("test.txt");
		
		//2.选择流
		Reader is=null;
		try {
			is = new FileReader(src);
			
		//3.操作
			char[] flush = new char[1024];
			int len=-1;
		while((len= is.read(flush))!=-1) {
			String str = new String(flush,0,len);
			System.out.println(str);
		}
		
		//4.释放资源

			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			try {
				is.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		} 
		
	
	}

}

13.字符输出流

和OutPutStream差不多的
但是有三种写法

package cn.lesson.io;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Writer;

/**
 * 字符输出流
 * 操作步骤
 * 1.创建源
 * 2.选择流
 * 3.操作(write)
 * 4.释放资源
 * @author MacBook
 *
 */
public class IoTest16 {

	public static void main(String[] args) {
		//1.创建源
		File src = new File("out13.txt");
		//2.选择流
		Writer os = null;
		try {
			os = new FileWriter(src);
			/*
			 * 3.操作(写入)
			 * 
			 */
//			//写法一:我们要写入的字符串
//			String str = "io is so easy哈哈哈";
//			//将字符串进行编码写入
//			char[] b = str.toCharArray();
//			os.write(b,0,b.length );//写入
//			os.flush();//养成刷新的好习惯
			
//			//写法二:
//			String str = "io is so easy哈哈哈";
//			os.write(str);//直接放入Str
////			//如果只想输出一部分
////			os.write(str,0,4);
//			os.flush();
			
			
			//写法三
			String str = "io is so easy哈哈哈";
			os.append(str);//可以一直点下去
			os.flush();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			//4.释放
			if(os!=null) {
				try {
					os.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
		
	}	

}

14.字节数组

之前文件是保存在硬盘上的,java并不能直接对其进行操作,需要虚拟机来对其进行操作 java -> os ->文件

现在的字节数组是存在内存中的,java可以对其直接进行操作
java-> 字节数组

  • 任何东西都可以用字节数组
  • 字节数组不用关闭(是java 的垃圾回收机制自从关闭)
  • 字节数组可以无限添加,但是不要太大

(1)字节输入流ByteArrayInputStream

package cn.lesson.io;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

/**
 * 字节数组输入流
 * 1.创建源
 * 2.选择流
 * 3.操作
 * 4.释放资源
 * @author MacBook
 *
 */
public class IoTestByte01 {

	public static void main(String[] args) {
		//1.创建源
		byte[] b = "talk is cheap show me the code".getBytes();
		
		//2.选择流
		InputStream is=null;
		try {
			is = new ByteArrayInputStream(b);
			
		//3.操作
			byte[] flush = new byte[1024*10*5];
			int len=-1;
		while((len= is.read(flush))!=-1) {
			String str = new String(flush,0,len);
			System.out.println(str);
		}
		
		

			
		
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			try {
				//4.释放资源
				is.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		} 
		
	
	}

}

(2)字节数组输出流

package cn.lesson.io;

import java.io.ByteArrayOutputStream;
import java.io.IOException;

/**
 * 字节数组输出流
 * 1.创建源: 不需要填入内容,因为在内存中是不确定的,所以java内部会维护。
 * 2.选择流:不关联源(不适用多态,字节数组输入流是使用的多态)
 * 3.操作(写出内容)
 * 4.释放资源,可以不用释放。
 * 
 * 获取数据
 * toByteArray()
 * 
 * @author MacBook
 *
 */
public class IoTestByte05 {

	public static void main(String[] args) {
		//1.创建源
		byte[] dest = null;
		//2.选择流
		ByteArrayOutputStream baos = null;
		baos = new ByteArrayOutputStream();
		//3.操作(写出)
		String msg = "沙雕!";
		byte[] datas = msg.getBytes();//字符串->字节
		baos.write(datas,0,datas.length);
		try {
			baos.flush();
			
		//获取数据
			dest = baos.toByteArray();
			System.out.println(dest.length+"-->"+new String(dest,0,dest.length));
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

}

15.综合_对接流

思路:
文件->程序->字节数组->程序->文件

package cn.lesson.io;

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

/**
 * 对接流
 * 1.将图片读取到字节数组中 
 * 2.将字节数组写出到图片中
 * @author MacBook
 *
 */
public class IoTestInner01 {

	public static void main(String[] args) {
		byte[] datas = fileToByteArray("p.png");
		System.out.println(datas.length);
		byteArrayToFile(datas,"pi.png");
	}
	
	/**
	 * 1.将图片读取到字节数组中
	 * 1)图片到程序 FileInPutStream
	 * 2)程序到字节数组 ByteArrayOutputStream
	 * @param filePath:文件的路径
	 */
	public static byte[] fileToByteArray(String filePath) {
		//1.创建源
		File src = new File(filePath);
		byte[] dest = null;
		
		//2.选择流
		InputStream is =null;
		ByteArrayOutputStream baos = null;
		baos = new ByteArrayOutputStream();
		
		
		
		try {
			is = new FileInputStream(src);
			
			//3.操作(分段读取)
			byte[] flush = new byte[1024*10];//1024表示1K,*10 就是10k,再*5,就是50K,不要将它们算出来,这样写好维护
			int len=-1;
			while((len= is.read(flush))!=-1) {
				baos.write(flush,0,len);//写出到字节数组中
			}
			baos.flush();
			return baos.toByteArray();//返回数据
		
		} 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.将字节数组写出到文件中
	 * 1)字节数组读取到程序中 ByteArrayInputStream
	 * 2)程序写出到图片文件中 FileOutputStream
	 * @param src :字节数组的数据源
	 * @param filePath :文件路径
	 */
	public static void byteArrayToFile(byte[] src,String filePath) {
		//1.创建源
		File dest = new File(filePath);
		
		//2.选择流
		InputStream is=null;
		OutputStream os = null;
		try {
			is = new ByteArrayInputStream(src);
			os = new FileOutputStream(dest);
			
		//3.操作
			byte[] flush = new byte[1024*10*5];
			int len=-1;
		while((len= is.read(flush))!=-1) {
			os.write(flush,0,len );//写入
		}
		os.flush();
		
		

			
		
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			if(os!=null) {
				try {
					os.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			
		}
		
		
	}

}

16.封装拷贝文件

package cn.lesson.io;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.Closeable;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

/**
 * 1.封装拷贝
 * 2.封装释放资源
 * @author MacBook
 * 
 */
public class EncapsulationCopy {
	
	

	public static void main(String[] args) {
		//文件->文件
		try {
			InputStream is =new FileInputStream("out.txt");
			OutputStream os = new FileOutputStream("output.txt");
			copy(is,os);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		//从文件->字节数组
		byte[] datas =null;
		try {
			InputStream is =new FileInputStream("p.png");
			ByteArrayOutputStream os = new ByteArrayOutputStream();
			copy(is,os);
			
			datas = os.toByteArray();
			System.out.println(datas.length);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		//字节数组->文件
		try {
			ByteArrayInputStream is =new ByteArrayInputStream(datas);
			OutputStream os = new FileOutputStream("po.png");
			copy(is,os);
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	/**
	 * 对接输入输出流
	 * @param is
	 * @param os
	 */
	public static void copy(InputStream is,OutputStream os) {
		
		
		try {
		
			
			//3.操作(复制)读取 之后再输出
			
			//读取
			byte[] flush = new byte[1024];
			int temp= -1;
			while((temp = is.read(flush))!=-1) {
				//写出去
				os.write(flush, 0, flush.length);
				
			}
			os.flush();
			
			 
			
			
			
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			close(is,os);
		}
				
		
			
	}
	
	/**
	 *  不是很正确的close方法,目的是拿来理解下面的close
	 * @param is
	 * @param os
	 */
	public static void close(InputStream is,OutputStream os) {
		if(os!=null) {
			try {
				os.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		if(is!=null) {
			try {
				is.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
	}

	}
	
	/**
	 * 释放资源正确的close代码,但是现在已经不用了,作为参考看看吧
	 * 新版本的释放资源直接在前面try(is,os){} 就行啦。不要finally了
	 * @param ios
	 */
	public  static void copy(Closeable...ios) {
		for(Closeable io:ios) {
			if(io!=null) {
				try {
					io.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}
	
	
}


猜你喜欢

转载自blog.csdn.net/qq_43287650/article/details/83755933