一、流的分类
1. 按数据流动方向:
- 输入流:只能从中读取字节数据,而不能向其写出数据
- 输出流:只能向其写入字节数据,而不能从中读取数据
2. 按照流的数据类型:
- 字节流:用于处理字节数据,一次读入或读出是8位二进制。
- 字符流:用于处理Unicode字符数据,一次读入或读出是16位二进制。
3.按照实现功能不同可以分为:
- 节点流(低级流):从/向一个特定的IO设备读/写数据的流。
- 处理流(高级流):对已存在的流进行连接和封装的流。
二:java中io中常用的流
1.对文件进行操作:
FileInputStream(字节输入流),FileOutputStream(字节输出流),FileReader(字符输入流),FileWriter(字符输出流)
2.对管道进行操作:
PipedInputStream(字节输入流),PipedOutStream(字节输出流),PipedReader(字符输入流),PipedWriter(字符输出流)
3.字节/字符数组:
ByteArrayInputStream,ByteArrayOutputStream,CharArrayReader,CharArrayWriter是在内存中开辟了一个字节或字符数组。
4.转化流:
InputStreamReader,OutputStreamWriter,把字节转化成字符。
5.数据流:
DataInputStream,DataOutputStream。
6.Buffered缓冲流:
BufferedInputStream,BufferedOutputStream,BufferedReader,BufferedWriter,是带缓冲区的处理流,缓冲区的作用的主要目的是:避免每次和硬盘打交道,提高数据访问的效率。
7.打印流:
printStream,printWriter。
8.对象流:
ObjectInputStream(反序列化对象输入流),ObjectOutputStream(序列化对象输出流)。
三:举例说明流的使用
/**
*导入的头文件
*/
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/**
* 字节输入输出流测试
*
* @author Nikita
*
*/
public class IOTest {
public static void main(String[] args) {
StringBuffer buffer = new StringBuffer(); // 字符串缓冲
/* 输入流 */
InputStream in = null;
try {
// 1. 打开输入流
in = new FileInputStream("E:\jg\exercise.txt");//从一个路径中打开输入流读取内容
// 2. 读取
byte[] b = new byte[1024 * 4];
int len = in.read(b); // 返回读取到的字节数,返回-1表示读取到流结尾
while(len != -1){
buffer.append(new String(b, 0, len)); // 将读取到的字节解析为String追加到缓冲
len = in.read(b);
}
System.out.println(buffer.toString());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
// 3. 释放资源,关闭输入流
if (in != null){
try {
in.close();//调用close()方法
} catch (IOException e) {
e.printStackTrace();
}
}
}
/* 输出流 */
OutputStream out = null;
try {
File file = new File("D:\test\demo\test.txt");//将目标文件路径放置在一个指定位置写入内容
if (!file.getParentFile().exists()){ // 文件路径不存在,则创建路径中所有不存在的目录
file.getParentFile().mkdirs();
}
// 1. 打开输出流
out = new FileOutputStream(file);
// 2. 写
out.write(buffer.toString().getBytes());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
// 3. 释放输出流资源
if (out != null){
try {out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}