1.流的概念
计算机中的流其实是一种信息转换。它是一种有序流,因此相对于某一对象,通常把对象接受外界的信息输入(input)称为输入流,相应地从对象向外输出(Output)的信息称为输出流,合称为输入/输出流(I/O Streams)。对象间进行信息或者数据的交换时,总是先将对象或数据转换为某种形式的流,再通过流的传输到达目的对象后将流转换为对象数据。所以,可以把流看做是一种数据的载体,通过它可以实现数据交换和传输。
在Java中,流仍是一个类的对象,很多文件的输入/输出操作都以此类的成员方法的方式来提供。
- Java的输入/输出流概述
Java流中分为两种,一种是字节流,另一种是字符流,每种流又分为输入和输出两种,并分别由四个抽象类来表示:InputStream、OutputStream、Reader、Writer。
(1)字节流:从InputStream和OutputStream派生出来的一系列类。这类流以字节(byte)为基本处理单位。
(2)字符流:从Reader和Write派生出的一系列类,这类流以16位Unicode码表示的字符为基本处理单位。
在这四个抽象类中,一些最基本的方法:
1)read()方法:当输入流被打开后,可以从里面读取信息。此方法可以从输入流中分离出一个或多个字节,如果字节没有准备好,则read命令将处于等待状态,直到字节流变为有效,即称为同步访问。在InputStream中的read()方法是个抽象方法,Java允许在InputStream流和Reader流的子类中重构read()方法。
2)write()方法:当输入流被打开后,可以使用write()方法向流中写入数据。Java允许在OutputStream流和Write流的子类中重构write()方法。
3)flush()方法:清空输入流。也就是强制把进程缓存中的数据提交给操作系统。并输出所有被缓存的字节。该方法将把缓存中所有内容强制输出到流中。
4)close()方法:对流操作完毕后,必须要将流对象关闭,此时流对象执行close()方法。close()方法不仅关闭输出流,而且释放与此流有关的所有系统资源。[关闭后的写操作会产生IOException异常。当停止I/O操作时,Java不会自动地清空(flush)和关闭数据流。因此,在I/O操作后,立即关不每一个数据流]
5)I/O中的异常:进行I/O操作时可能会产生I/O异常,这属于非运行时异常,应该在程序中处理。
2. 字节输入/输出流类
- Java的标准输入/输出流
public static final InputStream in;
public static final PrintStream out;
标准输入流System.in通常对应于键盘输入或者由主机环境(或用户)指定的另一个输入源;标准输出流System.out对应于显示器输出或由主机环境(或用户)指定的另一个输出目标。
实例:
public class Test1 {
public static void main(String[] args) throws IOException {
char a;
System.out.println("Please input a char");
a = (char)System.in.read();
System.out.println("The char is: " + a);
}
}
运行结果:
- 文件输入/输出流类:
1. FileInputStream类
FileInputStream类创建一个能从文件读取字节的InputStream,常用的构造方法:
1)FileInputStream(File fileobj):
通过打开一个到实际文件的连接来创建一个FileInputStream,该文件为文件系统的File对象fileobj。
2)FileInputStream(String path):
通过打开一个到实际文件的连接来创建一个FileInputStream,该文件的完整路径名为path。
2. FileOutputStream类
FileOutputStream类创建一个可以向文件写入字节的类OutputStreamÿ