1.流的分类
1)按照方向分类:输入流 输出流
2)按照操作的单位分类: 字节流 字符流
3)组合情况:字节输入流、字节输出流,字符输入流、字符输出流
2.字节输入流
1)抽象父级:InputStream--不能实例化
2)普通子级:
1>FileInputStream--操作文件的字节输入流
构造方法参数:File file / String pathname
2>BufferedInputStream--高效字节输入流
构造方法参数:InputStream,但无法创建抽象父级对象,所以传的是FileInputStream
案例:
package cn.tedu.file;
import java.io.*;//*表示通配
/*本类用于练习字节输入流InputStream*/
public class TestIn {
public static void main(String[] args) {
//method();//字节流的读取
method2();//高效字节流的读取
}
//本方法用于测试高效字节流的读取
private static void method2() {
//1.创建流对象
//InputStream in = new BufferedInputStream(new FileInputStream(new File("E:\\ready\\1.txt")));//不常用
//创建一个在本方法中都生效的局部变量,注意手动初始化,引用类型默认值为null
InputStream in2 = null;
try {
in2 = new BufferedInputStream(new FileInputStream("E:\\ready\\1.txt"));
//2.使用流对象
//方式一
// System.out.println(in2.read());
// System.out.println(in2.read());
// System.out.println(in2.read());
// System.out.println(in2.read());//-1,
//方式二
// int b;//定义一个变量,用来保存本次读到的数据
// while((b=in2.read())!=-1){//读取数据,只要不等于-1,说明还有数据,符合循环条件,继续循环
// System.out.println(b);//打印本轮读到的数据
// }
//方式三
for (int i = 0; i < (new File("E:\\ready\\1.txt").length()); i++) {
System.out.println(in2.read());
}
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
//3.关闭流对象
in2.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//本方法用于测试字节流的读取
private static void method() {
//创建一个在本方法中都生效的局部变量,注意手动初始化,引用类型默认值为null
InputStream in2 = null;
try {
//1.创建流对象,注意InputStream是抽象父类,不可以实例化
//File file = new File("D:\\ready\\1.txt");
//String path = "D:\\ready\\1.txt";
//Alt+shift+向上,向上移动本行代码
//InputStream in = new FileInputStream(new File("D:\\ready\\1.txt"));//并不常用
in2 = new FileInputStream("E:\\ready\\1.txt");
//2.1使用流对象,读取指定文件中的数据
/*read()每次调用都会读取一个字节,如果读到了文件数据的末尾,返回-1,
* 这个方法的返回值类型是int,所以会查找指定字符对应的编码打印出来*/
// System.out.println(in2.read());
// System.out.pr