本文是基于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 程序退出