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