java io流总结

java io 总结
分类:
按流的方向:输入和输出流
按流的数据单位:字节流和字符流
按流的功能:节点流和处理流

注1:
  字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,而字节流处理单元为1个字节, 操作字节和字节数组。
所以字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单位的字符而成的,所以它对多国语言支持性比较好!
如果是 音频文件、图片、歌曲,就用字节流好点,如果是关系到中文(文本)的,用字符流好点. 
  所有文件的储存是都是字节(byte)的储存,在磁盘上保留的并不是文件的字符而是先把字符编码成字节,再储存这些字节到磁盘。
在读取文件(特别是文本文件)时,也是一个字节一个字节地读取以形成字节序列. 
  字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串;字节流提供了处理任何类型的IO操作的功能,
但它不能直接处理Unicode字符,而字符流就可以。
注2:
  节点流表示的是直接操作节点(例如文件,键盘)的流,例如FileInputStream.
过滤流表示的是对节点流进行了操作(加工)的类,即装饰类(Decorator模式),例如 InputStreamReader(将字节流转换成字符流,是上面两者的转换类),BufferedReader 

io流的四大抽象类
字符流:Reader,Writer
字节流:InputStream(读数据),OutputStream(写数据)

以上的分类非常有助于对java io流的庞大系统进行清晰的理解。

下面继续介绍常用的操作类
文件访问
FileInputStream和FileOutputStream继承基类用于向文件中输入输出字节。
FileReader和FileWriter继承基类用于向文件中输入输出字符。

缓冲流
  缓冲流要套接在相应的节点流之上,提高了读写的效率。此处理流的构造方法都得传相对应的基类类型,
供了缓冲功能的输出流,在写出完成之前要调用flush来保证数据的输出
BufferedReader:提供了readLine方法用于高校读取一行字符串
BufferedWriter:提供了newLine用于写入一个行分隔符也就是换行
BufferedInputStream 没多大用处
BufferedOutputStream 没多大用处

转换流
。。。。

以下是示例

节点流 (字节):
1)输入
//读取数据
	public static void main(String[] args) throws Exception
	{
		//字节流
		FileInputStream fis=new FileInputStream("D:\\MyName.java");
		int c=-1;
		while ((c=fis.read())!=-1) 
		{ 
			char ch=(char)c;
			System.out.print(ch);			
		}
		fis.close();//关闭文件流
	}
2.输出
//写入数据到文件中
	public static void main(String[] args) throws Exception
	{
		boolean istrue=false;
		File file=new File("D:\\MyName.java");
		if(!file.exists())
		{
			file.createNewFile();	
		}	
		//替换原有的内容
//		FileOutputStream fos=new FileOutputStream("D:\\MyName.java");


		//追加内容到文件中去
		FileOutputStream fos=new FileOutputStream("D:\\MyName.java",true);
		int i='a';
		while (i<'a'+26)
		{
			fos.write(i);
			i++;
		}
		fos.flush();//刷新
		fos.close();
		
	}
节点流 (字符):
1)输入流

public static void main(String[] args) throws Exception 
	{
		FileReader iStream = new FileReader(
				"F:\\S2\\JavaOpp\\作业\\T2\\阶段练习\\s2jsp\\Board.java");
		int i = -1;
		while ((i = iStream.read()) != -1) 
		{
			char ch = (char) i;
			System.out.print(ch);
		}
		iStream.close();
	}
2)输出
public static void main(String[] args) throws Exception 
	{
		boolean istrue = false;
		File file = new File("D:\\MyName.java");
		if (!file.exists())
		{
			file.createNewFile();
		}
		FileWriter fWriter = new FileWriter("D:\\MyName.java", true);
		// FileWriter fWriter = new FileWriter("F:\\S2\\JavaOpp\\作业\\T2\\阶段练习\\s2jsp\\YourName.java");
		int i = 'a';
		while (i < 'a' + 26) 
		{
			fWriter.write(i);
			i++;
		}
		fWriter.flush();
		fWriter.close();
	}

处理流
1.输入
public static void main(String[] args) throws Exception 
	{
		BufferedReader bReader=new BufferedReader(new FileReader("D:\\MyName.java"));
		String string="";
		
		while((string=bReader.readLine())!= null)
		{
			System.out.println(string);
		}
		bReader.close();
	}
2.输出
public File genNewFile(String fileName){
        File file = new File(fileName);
        try {
            FileWriter fileWriter = new FileWriter(file);
            BufferedWriter writer = new BufferedWriter(fileWriter);
            //begin gen file
            writer.write(".....");
            writer.newLine();
            writer.write("...");
            //end gen file
            writer.flush();
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return file;  
    }
另请参考
http://www.iteye.com/topic/313635


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值