本文是基于Linux环境运行,读者阅读前需要具备一定Linux知识

使用处理流来包装节点流,程序通过处理流来执行输入/输出功能,只要流的构造器参数不是一个物理节点,而是一个已存在的流,那该流则是处理流,所有节点流都时直接以物理IO节点作为构造参数的

代码1-1使用PrintStream处理流来包装InputStream,被包装成处理流的节点流在使用时更方便

代码1-1

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;

public class PrintStreamTest {

	public static void main(String[] args) {
		if (args == null || args.length == 0) {
			throw new RuntimeException("请输入路径");
		}
		PrintStream ps = null;
		FileOutputStream fos = null;
		String[] books = new String[] { "Java编程思想", "编译原理", "算法" };
		try {
			fos = new FileOutputStream(args[0]);
			ps = new PrintStream(fos);
			for (String book : books) {
				ps.println(book);
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			if (ps != null) {
				ps.close();
			}
		}

	}

}

 

代码1-1运行结果:

root@lejian:/home/software/.io# java PrintStreamTest books 
root@lejian:/home/software/.io# cat books 
Java编程思想
编译原理
算法

当使用处理流来包装节点流之后,关闭输入/输出流资源时,只要关闭最上层的处理流即可 。关闭最上层处理流时,系统会自动关闭被该处理流包装的节点流

 

输入/输出体系里还提供2个转换流,这两个转换流用于实现将字节流转换成字符流,其中InputStreamReader将字节输入流转换成字符输入流,OutputStreamWriter将字节输出流转换成字符输出流。Java只提供了字节流转换成字符流,并未提供字符流转换成字节流,原因是字符流在使用上比字节流更方便

Java使用System.in代表标准输入,即键盘输入,但这个标准输入流是InputStream类的实例,使用不太方便,所以可以使用InputStreamReader将其转化成字符输入流,普通的Reader读取输入内容时依然不太方便,可以将普通的Reader再次包装成BufferedReader,利用BufferedReader的readLine()方法一行一行读取内容

代码1-2

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class BufferedReaderTest {

	public static void main(String[] args) {
		BufferedReader br = null;
		InputStreamReader read = null;
		try {
			read = new InputStreamReader(System.in);
			br = new BufferedReader(read);
			String buffer = null;
			while ((buffer = br.readLine()) != null) {
				if ("exit".equals(buffer)) {
					System.out.println("程序退出");
					System.exit(1);
				}
				System.out.println("输入内容为:" + buffer);
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			try {
				if (br != null) {
					br.close();
				}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

		}
	}

}

 

代码1-2运行结果:

root@lejian:/home/software/.io# java BufferedReaderTest 
hello
输入内容为:hello
world
输入内容为:world
exit
程序退出

 

posted on 2016-12-26 16:31  百里琰  阅读(232)  评论(0编辑  收藏  举报