IO流
按操作数据的不同,可以分为字节流和和字符流。
按数据传输方向的不同,又可分为输入流和输出流。
IO包中,字节流的输入输出流分别用java.io.InputStream和 java.io.OutputStream
字符流的输入输出流分别用java.io.Reader 和 java.io.Writer
字节流
在JDK中,提供了两个抽象类InputStream和OutputStream,所有的字节输入流都继承自InputStream,所有的字节输出流都继承自OutputStream
InputStream : 源 ---> 程序
OutputStream : 程序 ---> 目标
InputStream常用方法:
int read() 逐个读入字节
int read(byte[] b)
int read(byte[] b, int off, int len)
void close() 关闭此输入流并释放与此流相关的所有系统资源
OutputStream常用方法:
void write(int b) 逐个写出字节
void write(byte[] b)
void write(byte[] b, int off, int len)
void flush() 刷新此输出并强制写出所有缓冲的输出字节
void close() 关闭此输出流并释放与此流相关的所有系统资源
InputStream和OutputStream这两个类虽然提供了一系列和读写数据有关的方法,但是这两个类是抽象类,不能被实例化。
因此针对不同的功能,InputStream和OutputStream提供了不同的子类:
InputStream的子类:
ByteArrayInputStream
FileInputStream
FilterInputStream
PipedInputStream
SequenceInputStream
ObjectInputStream
其中,FilterInputStream有子类BufferedInputStream和DataInputStream
OutputStream的子类:
ByteArrayOutputStream
FileOutputStream
FilterOutputStream
PipedOutputStream
ObjectOutputStream
其中,FilterOutputStream有子类BufferedOutputStream、PrintStream和DataOutputStream
字节流读写文件
针对文件的读写,JDK专门提供了两个类,分别是FileInputStream和FileOutputStream
现在当前文件下创建好test.txt,内容为"itcast"import java.io.*;
import java.io.*;
public class Example01 {
public static void main(String[] args) throws Exception{
//创建一个文件字节输入流
FileInputStream in = new FileInputStream("test.txt");
int b = 0; //定义一个int类型变脸b,记住每次读取的一个字节
while(true){
b = in.read();
if(b == -1){
break;
}
System.out.println(b);
}
in.close();
}
}
运行结果
105
116
99
97
115
116
硬盘上的文件是以字节的形式存在的,在"i","t","c","a","s","t"分别占一个字节,因此,最终结果显示的就是文件test.txt的六个字节所对应的十进制数。