IO流
概述
I/O流称为输入/输出流,是指数据在程序跟另一端进行流向的一个过程,另一端可以是硬盘上的文件,也可以是网络或者其它。
这里的入跟出都是相对程序而已的,输入流是指数据源流向程序,输出是指从程序将数据写出到数据源中。
IO的分类
根据数据的流向分为:输入流和输出流。
- 输入流 :把数据从数据源上读取到程序中的流。
- 输出流 :把数据从程序中写出到数据源上的流。
根据数据的类型分为:字节流和字符流。
-
字节流 :以字节为单位,读写数据的流。
-
字符流 :以字符为单位,读写数据的流。
字节流
一切文件数据(文本、图片、视频等)在存储时,都是以二进制数字的形式保存,传输时只需要传输对应的二进制数据即可。流的传输底层就是这些二进制的数据的流动
-
java.io.OutputStream
抽象类是表示字节输出流的超类,将指定的字节信息写出到目的地。常用API有public void close()
:关闭此输出流并释放与此流相关联的任何系统资源。public void flush()
:刷新此输出流并强制任何缓冲的输出字节被写出。public void write(byte[] b)
:将 b.length个字节从指定的字节数组写入此输出流。public void write(byte[] b, int off, int len)
:从指定的字节数组写入 len字节,从偏移量 off开始输出到此输出流。public abstract void write(int b)
:将指定的字节输出流。
-
java.io.InputStream
抽象类是表示字节输入流的超类,可以读取字节信息到内存中。常用API有-
public void close()
:关闭此输入流并释放与此流相关联的任何系统资源。 -
public abstract int read()
: 从输入流读取数据的下一个字节。 -
public int read(byte[] b)
: 从输入流中读取一些字节数,并将它们存储到字节数组b
-
字符流
有时候我们需要通过程序去操作文本文件,这时使用字节流可能会出现字符显示不完整的问题因为一个中文字符可能占据多个字节。所以JAVA专门提供一类字符流,以字符为单位操作,使用这类流来操作字符类型的数据更加契合。
java.io.Reader
抽象类是表示用于读取字符流的超类,它定义了字符输入流的基本共性功能方法。
-
public void close()
:关闭此流并释放与此流相关联的任何系统资源。 -
public int read()
: 从输入流读取一个字符。 -
public int read(char[] cbuf)
: 从输入流中读取一些字符,并将它们存储到字符数组 cbuf中 。
缓冲流
字符缓冲流
构造方法
-
public BufferedReader(Reader in)
:创建一个 新的缓冲输入流。 -
public BufferedWriter(Writer out)
: 创建一个新的缓冲输出流。 -
特有方法
字符缓冲流的基本方法与普通字符流调用方式一致,不再阐述,我们来看它们具备的特有方法。
- BufferedReader:
public String readLine()
: 读一行文字。 - BufferedWriter:
public void newLine()
: 写一行行分隔符,由系统属性定义符号。
案例
题目:
在程序中写一个"HelloJavaWorld你好世界"输出到操作系统文件Hello.txt文件中
public class Practise {
public static void main(String[] args) {
File f = new File("d:/zty/Hello.txt");
FileWriter fw = null;
try {
fw = new FileWriter(f,false);
BufferedWriter bw = new BufferedWriter(fw);
fw.write("Hello.txt");
}catch (Exception e){
e.printStackTrace();
}finally {
try {
if (fw!=null){
fw.close();
}
}catch (Exception e ){
e.printStackTrace();
}
}
}
}