缓冲流,转换流,标准输入输出流

声明:由于学习所用环境为JDK1.8,所有java代码均在JDK1.8环境中测试通过,如果环境发生变化,可能会有错误发生!

一.缓冲流

缓冲流是处理流的一种,建立在相应的节点流之上,对读写的数据提供了缓冲的功能,提高了读写的效率,还增加了一些新的方法
JDK提供四种缓冲流
BufferedInputStream 可以对任何的InputStream流进行包装
BufferedOutputStream 可以对任何的OutputStream流进行包装
BufferedReader 可以对任何的Reader流进行包装

新增了readLine()方法用于一次读取一行字符串

package buffer;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.Reader;

public class BufferedReaderDemo {

	public static void main(String[] args) {
		File f=new File("c:"+File.separator+"test.txt");
		Reader r=null;
		BufferedReader br=null;
		try {
			r=new FileReader(f);
			br=new BufferedReader(r);
			String line="";
			while((line=br.readLine())!=null){
				System.out.println(line);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

BufferedWriter 可以对任何的Writer流进行包装

新增了newLine()方法用于写出一个行分隔符

package buffer;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.Writer;

public class BufferedWriterDemo {

	public static void main(String[] args) {
		File f=new File("c:"+File.separator+"test1.txt");
		Writer w=null;
		BufferedWriter bw=null;
		try {
			w=new FileWriter(f);
			bw=new BufferedWriter(w);
			bw.write("床前明月光");
			bw.newLine();
			bw.write("疑是地上霜");
			bw.newLine();
			bw.write("举头望明月");
			bw.newLine();
			bw.write("低头思故乡");
			bw.flush();
			System.out.println("写入成功");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

对于缓冲输出流,写出的数据会先缓存在内存缓冲区中,关闭此流前要用flush()方法将缓存区的数据立刻写出

关闭缓冲流时,会自动关闭缓冲流所包装的所有底层流。

课堂练习:复制图片

package buffer;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
public class CopyImage {

	public static void main(String[] args) {
		File srcFile=new File("e:"+File.separator+"picture"+File.separator+"6.jpg");
		File destFile=new File("c:"+File.separator+srcFile.getName());
		InputStream input=null;
		BufferedInputStream bis=null;
		OutputStream output=null;
		BufferedOutputStream bos=null;
		try {
			input=new FileInputStream(srcFile);
			bis=new BufferedInputStream(input);
			output=new FileOutputStream(destFile);
			bos=new BufferedOutputStream(output);
			int len=0;
			while((len=bis.read())!=-1){
				bos.write(len);
			}
			System.out.println("复制完成!");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
二.转换流

1、在IO包中,实际上只有字节流,字符流是在字节流的基础上转换出来的。
转换流用于在字节流和字符流之间转换。
JDK提供了两种转换流
InputStreamReader
是Reader的子类,将输入的字节流变为字符流,即:将一个字节流的输入对象变为字符流的输入对象。
InputStreamReader需要和InputStream“套接”,它可以将字节流中读入的字节解码成字符
OutputStreamWriter
是Writer的子类,将输出的字符流变为字节流,即:将一个字符流的输出对象变为字节流的输出对象。
OutputStreamWriter需要和OutputStream“套接”,它可以将要写入字节流的字符编码成字节

2、转换步骤


package convert;

import java.io.*;
public class InputStreamReaderDemo {

	public static void main(String[] args) {
		InputStreamReader isr=new InputStreamReader(System.in);
		BufferedReader br=new BufferedReader(isr);
		System.out.println("请输入:");
		try {
			String content=br.readLine();
			System.out.println("输入的内容是:"+content);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}
package convert;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;

public class OutputStreamWriterDemo {
	public static void main(String[] args){
		OutputStream out=null;
		OutputStreamWriter osw=null;
		BufferedWriter bw=null;
		try {
			out=new FileOutputStream("c:"+File.separator+"test.txt");
			osw= new OutputStreamWriter(out);
			bw=new BufferedWriter(osw);
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			try {
				bw.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

}

课堂练习:模拟记录用户登录日志(采用追加方式记录),从控制台接收用户输入的用户名和密码,在文件中记录用户名和密码以及登录时间, 格式如下: name=zhangsan,pwd=123456,时间=2014-06-05 18:22:33

package convert;

import java.io.*;
import java.util.Date;
import java.util.Properties;
import java.text.SimpleDateFormat;

public class Exercise {

	public static void main(String[] args) {
		Properties pro=new Properties();
		InputStreamReader isr=new InputStreamReader(System.in);
		BufferedReader br=new BufferedReader(isr);
		OutputStream out=null;
		OutputStreamWriter osw=null;
		BufferedWriter bw=null;
		try {
			System.out.println("请输入用户名:");
			pro.setProperty("name", br.readLine());
			System.out.println("请输入密码:");
			pro.setProperty("password", br.readLine());
			out=new FileOutputStream("c:"+File.separator+"test.properties",true);
			osw=new OutputStreamWriter(out);
			bw=new BufferedWriter(osw);
			Date date=new Date();
	        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd:HH-mm-ss");
	        pro.setProperty("time", sdf.format(date));
	        pro.store(out, "this is information");
	        System.out.println("写入成功!");
	        bw.newLine();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			try {
				bw.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

}

三.标准输入、输出流

1. System.in 标准输入流
    
2. System.out标准输出流

3. System.err“标准”错误输出流

四.扩展(Properties类--Hashtable的子类)

一般用于配置属性文件

package properties;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Properties;

public class PropertiesLoad {

	public static void main(String[] args) {
		Properties pro=new Properties();
		InputStream input=null;
		try {
			input=new FileInputStream("c:"+File.separator+"test1.txt");
			pro.load(input);
			System.out.println(pro.getProperty("name"));
			System.out.println(pro.getProperty("sex"));
			System.out.println(pro.getProperty("hobby"));
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}

}
package properties;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Properties;

public class PropertityStore {

	public static void main(String[] args) {
		Properties pro=new Properties();
		pro.setProperty("name", "lily");
		pro.setProperty("sex", "female");
		pro.setProperty("hobby", "code");
		OutputStream out=null;
		try {
			out=new FileOutputStream("c:"+File.separator+"test1.txt");
			pro.store(out, "this is information");
			System.out.println("属性文件写入成功!");
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			try {
				out.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

}














  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值