java4android32-34Java的io流

本文介绍了Java中的I/O操作原理及分类,包括输入输出流的读写方法,并通过实例讲解了装饰者模式的应用,如BufferedReader如何增强FileReader的功能。
本集主要内容.
里面很多很多的类,
java io系统,用了一个很巧妙的设计模式.
         1.I/O操作的目标.
         2.I/O的分类方法.
         3.读取文件和写入文件的方法.
1.I/O操作的目标
 从数据源当中读取数据,以及将数据写入到数据目的地当中.

 
 I/O流向
 

 所谓的输入输出是个方向的问题,
 所谓的方向,必须有一个参照物的物体.
 相对于java应用程序本身.  

 IO的分类.
 第一种分法:
 1.输入流
 2.输出流.
 第二种分法
 1.字节流.
 2.字符流.
 第三种分法
 1.节点流
 2.处理流.
在java的世界里面,所有的东西都是对象.
输入,输出流都是对象.

要有对象,先有类
I/O当中的核心类.
  抽象类  
这4个类是处理字节流核心类,字符流核心类下节课介绍.

         核心类的核心方法
         InputStream 
            intread(byte[] b, int off , int len)
         OutputStream  
           void write(byte[] b ,int off ,in len);      
          
//第一步骤:导入类;
import java.io.*;

class Test{
	public static void main(String args[]){
		//声明输入流引用    
		FileInputStream fis = null;
		//声明输出流引用
		FileOutputStream fos = null;
		try{
		    //生成代表输入流的对象.
			fis = new FileInputStream("g:/srclxm/from.txt");
			//生成代表输出流的对象
			 fos = new FileOutputStream("g:/srclxm/to.txt");
			//生成一个字节数组
			byte [] buffer  = new byte[100];
			//调用输入流对象的read方法,读取数据
			//fis.read(buffer,0,buffer.length);
			int temp =fis.read(buffer,0,buffer.length); 
			fos.write(buffer,0,temp);
			//for(int i = 0; i < buffer.length; i++){
			//	System.out.println(buffer[i]);
				String s = new String(buffer);
				//调用一个String对象的 trim方法,将会去除掉这个字符串
				//的首尾空格和空字符.
				s = s.trim();
	     		<span style="white-space:pre">	</span>System.out.println(s);
				}
		}
		catch(Exception e){
			 System.out.println(e);
			}
		}
}
 总结:
          1. I/O系统的主要目标是为了对数据进行读写操作.
          2.数据的流向以java程序为参照物

          3.I/O流可以有三种分类方法.

          4.read方法和writer方法.        

本集主要内容

         1.大文件的读写方法
         2.字符流的使用方法

import java.io.*;
class Test{
	public static void main(String argsp[]){
		FileInputStream fis = null;
		FileOutputStream fos = null;
		try{
			fis = new FileInputStream("E:/marschen/fileop/form.txt");
			fos = new FileOutputStream("E:/marschen/fileop/to.txt");
			byte [] buffer = new byte[1024];
			while(true){
				int temp = fis.read(buffer,0,buffer.length);
				if(-1 == temp){
					break;
				}
				fos.write(buffer,0,temp);
			}
		}
		catch(Exception e){
			System.out.println(e);
		}		
		finally{
			try{
				fis.close();
				fos.close();
			}
			catch(Exception e){
				System.out.println(e);
			}
	    }
	}
}

//字符流:读写文件时,以字符为基础
//字符输入流:Reader  <----FileReader  int read(char [] c,int off,int len);
//字符输出流:Writer  <----FileWriter  int write(char [] c,int off,int len);

import java.io.*;

public class TestChar{
	public static void main(String args[]){
		FileReader fr = null;
		FileWriter fw = null;
		try{
			fr = new FileReader("E:/marschen/fileop/form.txt");
			fw = new FileWriter("E:/marschen/fileop/to.txt");
			char [] buffer = new char[100];
			int temp = fr.read(buffer,0,buffer.length);
			fw.write(buffer,0,temp);
			/*for(int i = 0; i < buffer.length; i++)
			{
				System.out.println(buffer[i]);
			}*/
    	}
	    catch(Exception e){
	    	System.out.println(e);
	     		
	    }
	    finally{
	    	try{
	    		fr.close();
	    		fw.close(); 
	    	}	
	        catch(Exception e){
	        	System.out.println(e);
	        }
	     }
	}
}

 总结,大文件读写,创建一个数组,用一个循环,每次从文件中读取一部分放入数组
        这个循环当读写到文件尾部的时候,停.

        最后,要记得 file.close();

主要内容

  1.处理流使用实例.
  2. 装饰者模式(Decorator)
  3. 节点流与处理流之间的关系
   
  BufferdReader介绍
    public String raadLine()
            throwsIOException
  Reads a line of text. A line is condsidered to be berminated by any on e of a line 
   

import java.io.*;

class Test{
	public static void main(String args[]){
		FileReader fileReader = null;
		BufferedReader bufferedReader = null;
		try{
			fileReader = new FileReader("E:/marschen/fileop/form.txt");
			bufferedReader = new BufferedReader(fileReader);
			//String line = bufferedReader.readLine();
			//System.out.println(line);
		    String line = null;
			while(true){
				line = bufferedReader.readLine();
				if(line == null){
					break;
				}
				System.out.println(line);
			}
		}
		catch(Exception e){
			System.out.println(e);
		}
		finally{
			try{
				bufferedReader.close();
				fileReader.close();
			}
			catch(Exception e ){
				System.out.println(e);
			}
		}
	}
}

装饰者模式(Decorator) 下面通过5个类来说明 Worker类, Carpenter类,Plumber类, AWorker类,TestWorker类

Worker类, 

 //接口
 interface Worker{ 
	public void doSomeWork();
 }

Carpenter类,

//木匠
class Carpenter implements Worker{
	public void doSomeWork(){
		System.out.println("修门窗");
	}
}
Plumber类, 
//水管工
class Plumber implements Worker{ //实现Worker
	public void doSomeWork(){
		System.out.println("修水管");
	}
}

AWorker类

//水管工
class AWorker implements Worker{ //实现Worker
	public void doSomeWork(){
		System.out.println("修水管");
	}
}

TestWorker类

class TestWorker{
	public static void main(String args[]){
	//生成一个A公司水管工对象
	Plumber plumber = new Plumber();//先生成一个水管工
	AWorker aWorker = new AWorker(plumber); //再生一个A公司员工,并且
	aWorker.doSomeWork();                   //把水管工传入
	
	//生成一个A公司木匠对象
	Carpenter carpenter = new Carpenter();//先生成一个木匠
	AWorker aWorker2 = new AWorker(carpenter);//再生一个A公司员工,并且
	aWorker2.doSomeWork();                       //把木匠传入
	}
}

总结

使用装饰者模式.
不使用继承.
处理流  BufferedReader     相当于工人     是装饰者
节点流  FileReader         相当于水管工   被装饰者.
被装饰者要作为对象传到装饰者里面去.
BufferedReader 可以装饰 读取文件,
                       还可以读取键盘
                       还可以读取网络.                    
处理流是给节点流添加功能
处理流还有很多,比如压缩流,管道流,,,,,,都是在节点流基础上扩展的.在上面添加一些新功能.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值