字节流读取
概述
InputStream是字节流读取的父类。而且是一个抽象类。
常用方法
方法名 |
解释 |
void close() |
关闭此输入流并释放与该流关联的所有系统资源。 |
abstract int read( ) |
从输入流读取数据的下一个字节。 |
int read(byte[] b) |
从输入流中读取一定数量的字节,并将其存储在缓冲区数组b |
int read(byte[] b, int off, int 1en) |
将输入流中最多len 个数据字节读入byte数组。 |
概述
FileInputStream从文件系统中的文件获取输入字节。 什么文件可用取决于主机环境。
创建对象的方式
构造方法 |
解释 |
FileInputStream(File file) |
通过打开与实际文件的连接创建一个 FileInputStream ,该文件由文件系统中的 File 对象 file 命名。 |
FileInputStream(String name) |
通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的路径名 name 命名。 |
常用方法
方法名 |
解释 |
int read() |
从输入流读取数据的下一个字节。 |
int read(byte[] b, int off, int len) |
将输入流中最多len 个数据字节读入byte数组。 |
void close() |
关闭此输入流并释放与流相关联的任何系统资源。 |
|
|
读取方式:
InputStream in = new FileInputStream("D:\\iotest\\1.txt");
int len=-1
while( ( len = in.read() ) != -1 ) {
System.out.println(len);
}
in.close();
案例
//字节流读取
public static void method() {
try {
//1、创建对象 -- 参数是 文件 的路径
InputStream in = new FileInputStream("D:\\iotest\\1.txt");//触发String参数的构造
InputStream in2 = new FileInputStream(new File("D:\\iotest\\1.txt"));//触发File参数的构造
//2、开始读取
/*
* System.out.println( in.read() ); //97,由于读取到了a字符,而且read()返回值是int类型。
* System.out.println( in.read() );
* System.out.println( in.read() );
*
* System.out.println( in.read() ); //由于没有数据了,所以read()返回-1
*/
int b = 0 ; //定义变量,记录读取到的值
while( ( b = in.read() ) != -1 ) {//因为读到-1时就没数据了
System.out.println(b);
}
//3、释放资源
in.close();
// System.out.println(in.read());//Stream Closed
} catch (IOException e) {
e.printStackTrace();
}
}
概述
BufferedInputStream为另一个输入流添加了功能,即缓冲输入和支持mark和reset方法的功能。 当创建BufferedInputStream时,将创建一个内部缓冲区数组。 当从流中读取或跳过字节时,内部缓冲区将根据需要从所包含的输入流中重新填充,一次有多个字节。
创建对象的方式
构造方法 |
解释 |
BufferedInputStream(InputStream in) |
创建一个 BufferedInputStream并保存其参数,输入流 in ,供以后使用。 |
BufferedInputStream(InputStream in, int size) |
创建 BufferedInputStream具有指定缓冲区大小,并保存其参数,输入流 in ,供以后使用。 |
常用方法
方法名 |
解释 |
int read() |
从输入流读取数据的下一个字节。 |
int read(byte[] b, int off, int len) |
将输入流中最多len 个数据字节读入byte数组。 |
void close() |
关闭此输入流并释放与流相关联的任何系统资源。 |
|
|
读取语法
InputStream in = new BufferedInputStream(newFileInputStream("D:\\iotest\\1.txt")); int len=-1
while( ( len = in.read() ) != -1 ) {
System.out.println(len);
}
in.close();
字符流读取
常用于处理纯文本数据。
Reader抽象类
概述
用于读取字符流的抽象类。
常用方法
方法名 |
解释 |
int read() |
读取单个字符。 |
int read(char[] cbuf) |
将字符读入数组。 |
abstract int read(char[] cbuf, int off, int len) |
将字符读入数组的某一部分。 |
int read(CharBuffer target) |
试图将字符读入指定的字符缓冲区。 |
abstract void close() |
关闭该流并释放与之关联的所有资源。 |
FileReader子类
概述
用来读取字符文件的便捷类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是适当的。要自己指定这些值,可以先在 FileInputStream 上构造一个 InputStreamReader。
创建对象
构造方法 |
解释 |
FileReader(String fileName) |
在给定从中读取数据的文件名的情况下创建一个新 FileReader 。 |
FileReader(File file) |
在给定从中读取数据的 File 的情况下创建一个新 FileReader 。 |
常用方法
方法名 |
解释 |
void close() |
关闭流并释放与之相关联的任何系统资源。 |
int read() |
读一个字符 |
int read(char[] cbuf, int off, int len) |
将字符读入数组的一部分。 |
BufferedReader子类
概述
从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。
可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了。
创建对象
构造方法 |
解释 |
BufferedReader(Reader in) |
创建使用默认大小的输入缓冲区的缓冲字符输入流。 |
BufferedReader(Reader in, int sz) |
创建使用指定大小的输入缓冲区的缓冲字符输入流。 |
常用方法
方法名 |
解释 |
void close() |
关闭流并释放与之相关联的任何系统资源。 |
int read() |
读一个字符 |
int read(char[] cbuf, int off, int len) |
将字符读入数组的一部分。 |
String readLine() |
读一行文字。 |
测试代码:
//这个类用来测试 字符流读取
//总结:
//1、执行效率上:BufferedReader > FileReader
//2、原因是:底层维护了一个char[] ,可以按照数组的长度一次性的读取一大批数据。默认的容量是8192字节量,也就是8K。
public class Test2_In2 {
public static void main(String[] args) {
// method();//FileReader读取
method2();//BufferedReader读取
}
public static void method2() {
try {
//1、创建对象
Reader in = new
BufferedReader(newFileReader("D:\\iotest\\1.txt"));
//2、开始读取
int b = 0 ;
while( ( b = in.read() ) != -1) {
System.out.println(b);
}
//3、释放资源
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
//FileReader读取
public static void method() {
try {
//1、创建对象
Reader in = new FileReader("D:\\iotest\\1.txt") ;
Reader in2 = new FileReader(new File("D:\\iotest\\1.txt")) ;
//2、开始读取
int b = 0 ; //定义变量,记录读取到的数据
while( ( b = in.read() ) != -1 ) {
System.out.println(b);
}
//3、释放资源
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}