Java 流(Stream)、文件(File)和IO
Java.io 包几乎包含了所有操作输入、输出需要的类。所有这些流类代表了输入源和输出目标。
Java.io 包中的流支持很多种格式,比如:基本类型、对象、本地化字符集等等。
一个流可以理解为一个数据的序列。输入流表示从一个源读取数据,输出流表示向一个目标写数据。
读取控制台输入
Java 的控制台输入由 System.in 完成, System.in 代表 控制台输入
为了获得控制台输入,可以创建一个字符流的输入流对象 InputStreamReader,该对象连接到 System.in控制台输入。
然后创建一个字符流的缓冲区BufferedReader对象,该缓冲区连接到输入流,从输入流读取数据。
InputStreamReader 是 字节流,按字节读取控制台内容,
Reader类及其子类提供的字符流的读取char,inputStream及其子类提供字节流的读取byte;
Writer类及其子类提供字符流的写入char,OutputStream及其子类提供字节流的写入byte。
InputStream、OutputStream
处理字节流的抽象类
InputStream 是字节输入流的所有类的超类,一般我们使用它的子类,如FileInputStream等.
OutputStream是字节输出流的所有类的超类,一般我们使用它的子类,如FileOutputStream等.
2.InputStreamReader OutputStreamWriter
处理字符流的抽象类
InputStreamReader 是字节流通向字符流的桥梁,它将字节流转换为字符流.
OutputStreamWriter是字符流通向字节流的桥梁,它将字符流转换为字节流
.
3.BufferedReader BufferedWriter
BufferedReader 由Reader类扩展而来,提供通用的缓冲方式文本读取,readLine读取一个文本行,
从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取。
BufferedWriter 由Writer 类扩展而来,提供通用的缓冲方式文本写入, newLine使用平台自己的行分隔符,
将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。
所以FileReader类是将文件按字符流的方式读取,FileInputStream则按字节流的方式读取文件;
InputStreamReader可以将字节流转换成字符流方式,是reader和stream之间的桥梁
InputStream is = new InputStream(System.in);
BufferedReader br = new BufferedReader(is);
br.read(); -- 读取一个字符
br.readLine(); --读取一行字符串
BufferedReader 对象读取一个字符要使用 read() 方法,它的语法如下:
int read( ) throws IOException
每次调用 read() 方法,它从输入流读取一个字符并把该字符作为整数值返回。 当流结束的时候返回 -1。该方法抛出 IOException。
// 使用 BufferedReader 在控制台读取字符 import java.io.*; public class BRRead { public static void main(String args[]) throws IOException { char c; // 使用 System.in 创建 BufferedReader BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("输入字符, 按下 'q' 键退出。"); // 读取字符 do { c = (char) br.read(); System.out.println(c); } while(c != 'q'); } }