浅谈IO流

本文详细介绍了Java中的IO流,包括字符流与字节流的区别、常用流类的使用方法及其实现原理。通过示例代码展示了如何使用这些流来复制不同类型的文件,如文本文件和图片文件,并解释了缓冲流在提高读写效率方面的作用。

 

java io流

      Reader

              FileReader

              BufferReader

             PipeReader

             InputStreamReader

 

      Writer

            FileWriter

            BufferWriter

            PipeWriter             

           OutputStreamWriter         

 

     InputStream

                FileInputStream

                FilterInputStream

                               BufferedInputStream

                ObjectInputStream

 

    OutputStream

                FileOutputStream

                FilterOutputStream

                               BufferedOutputStream

                ObjectOutputStream

 

凡是后面带有Reader,Writer都是字符流,后面为Stream都是字节流,而其中的 InputStreamReader,OutputStreamWriter        是作为字符流与字节流的桥梁,所以字节流可以转换为字符流,在应用中,字符流一般读取文件内容是以字符存在,如文本文件,而字节流,是为了读取内容为字节的文件,如图片文件

 

代码示例:

用于copy文件

public class IoTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String srcPath = "F:\\dvbs_gui_object_scan.txt";
		String destPath = "F:\\2.txt";
		//String srcPath = "F:\\title_logo_onestar.jpg";
		//String destPath = "F:\\1.jpg";
		copyFile(destPath,srcPath);
	}

	private static void copyFile(String destPath, String srcPath) {
		// TODO Auto-generated method stub
		File srcFile = new File(srcPath);
		if(!srcFile.exists()){
			System.out.println("file is not exists");
			return; 
		}
		
		File destFile = new File(destPath);
		if(!destFile.exists()){
			try {
				destFile.createNewFile();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		if(srcPath.endsWith(".txt")){
			
			FileReader fileReader = null;
			FileWriter fileWriter = null;
			BufferedReader br = null;
			BufferedWriter bw = null;
			
			try {
				fileReader = new FileReader(srcFile);
				fileWriter = new FileWriter(destFile);
				br = new BufferedReader(fileReader);
				bw = new BufferedWriter(fileWriter);
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} 
			
			char[] buffer = new char[1024];
			int len = 0;
			try {
				while((len=br.read(buffer))!=-1){
					bw.write(buffer, 0, len);
				}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

			try {
				if(fileReader!=null){
					fileReader.close();
				}
				if(br!=null){
					br.close();
				}
				if(bw!=null){
					bw.close();
				}
				if(fileWriter!=null){
					fileWriter.close();
				}
					
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		else{
			FileInputStream fis = null;
			FileOutputStream fos = null;
			try {
				fis = new FileInputStream(srcFile);
				fos = new FileOutputStream(destFile);
			} catch (FileNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			BufferedInputStream bips = null;
			BufferedOutputStream bops = null;
			bips = new BufferedInputStream(fis);
			bops = new BufferedOutputStream(fos);
			
			byte[] buffer = new byte[1024];
			int len = 0;
			try {
				while((len = bips.read(buffer))!=-1){
					bops.write(buffer, 0, len);
				}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
	        try {
	        	if(fis!=null){
	        		fis.close();
	        	}
	        	if(bips!=null){
	        		bips.close();
	        	}
	        	if(bops!=null){
	        		bops.close();
	        	}
	        	if(fos!=null){
	        		fos.close();
	        	}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
			
		}
		
	}

}


 

其中缓冲流的作用是提高速度;以空间换时间

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值