持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第14天,点击查看活动详情
1. I/O流
1.1 概述
- IO流用来处理设备之间的数据传输
- Java对数据的操作是通过流的方式
- Java用于操作流的对象都在IO包中
1.2 分类
(1) 按照数据流向:输入流、输出流
(2) 按照数据类型:字节流、字符流
2. 字节流
2.1 字节输入流
2.1.1 输入流模式
2.1.2 输入流分类
2.1.3 子类实例
2.1.3.1 构造方法
a. FileInputStream(File file): 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的 File对象 file命名。
b. FileInputStream(String name): 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的路径名name命名。
2.1.3.2 创建实例
import java.io.*;
//文件内容
public class Test {
public static void main(String[] args) throws Exception{
// 使用文件名称创建流对象.
InputStream in = new FileInputStream("test.txt");
// 定义字节数组,作为装字节数据的容器
byte[] b = new byte[2];
// 循环读取
while (in.read(b) != -1){
// 每次读取后,把数组变成字符串打印
System.out.println(new String(b));
}
// 关闭资源
in.close();
}
}
2.1.4 常用方法
public void close() 关闭此输入流并释放与此流相关联的任何系统资源; public abstract int read() 从输入流读取数据的下一个字节; public int read(byte[] b) 该方法返回的int值代表的是读取了多少个字节,读到几个返回几个,读取不到返回-1。
2.2 字节输出流
2.2.1 输出流模式
2.2.2 输出流分类
2.2.3 子类实例
(1) 构造方法
public FileOutputStream(File file) 根据File对象为参数创建对象; public FileOutputStream(String name) 根据名称字符串为参数创建对象。 public FileOutputStream(File file, boolean append) 创建新的输出流对象并指定是否追加续写;
(2) 创建实例
import java.io.*;
public class Test {
public static void main(String[] args) throws Exception{
OutputStream out = new FileOutputStream("test.txt");
// 写入单个字节
out.write(97);
//换行
out.write("\r\n".getBytes());
// 写入字节数组
byte[] b = new String("abcde").getBytes();
out.write(b);
out.write("\r\n".getBytes());
// 写入指定长度的字节数组
out.write(b,1,2);
// 关闭资源
out.close();
}
}
2.2.4 常用方法
public void close() 关闭此输出流并释放与此流相关联的任何系统资源; public void flush() 刷新此输出流并强制任何缓冲的输出字节被写出; public void write(byte[] b) 将 b.length个字节从指定的字节数组写入此输出流; public void write(byte[] b, int off, int len) 从指定的字节数组写入 len字节,从偏移量 off开始输出到此输出流。 也就是说从off个字节数开始读取一直到len个字节结束; public abstract void write(int b) 将指定的字节写入输出流。
3.字符流
3.1 字符输入流
java.io.Reader抽象类是字符输入流的所有类的超类(父类),可以读取字符信息到内存中。它定义了字符输入流的基本共性功能方法。
3.1.1 常用方法
public void close() 关闭此流并释放与此流相关联的任何系统资源;
public int read() 从输入流读取一个字符;
public int read(char[] cbuf) 从输入流中读取一些字符,并将它们存储到字符数组 cbuf中。
3.2 字符输出流
java.io.Writer抽象类是字符输出流的所有类的超类(父类),将指定的字符信息写出到目的地。它同样定义了字符输出流的基本共性功能方法。
3.2.1 子类实例
import java.io.*;
public class Test {
public static void main(String[] args) throws Exception{
// 创建流对象
Writer writer = new FileWriter("test.txt");
writer.write(97);
writer.write('b');
writer.write("fsdfs");
//关闭资源时,与FileOutputStream不同。 如果不关闭,数据只是保存到缓冲区,并未保存到文件。
writer.flush();
writer.close();
}
}
注意:关闭资源时,与FileOutputStream不同。 如果不关闭,数据只是保存到缓冲区,并未保存到文件。
3.2.2 常用方法
void write(int c): 写入单个字符;
void write(char[] cbuf):写入字符数组;
abstract void write(char[] cbuf, int off, int len):写入字符数组的某一部分,off数组的开始索引,len写的字符个数;
void write(String str):写入字符串;
void write(String str, int off, int len):写入字符串的某一部分,off字符串的开始索引,len写的字符个数; void flush():刷新该流的缓冲;
void close():关闭此流,但要先刷新它。
4. 缓冲流
缓冲流,也叫高效流。能够高效读写缓冲流,能够转换编码的转换流,能够持久化存储对象的序列化对象等等。
按照数据类型分类:
- 字节缓冲流:BufferedInputStream,BufferedOutputStream
- 字符缓冲流:BufferedReader,BufferedWriter
4.1 字节缓冲流
(1) 节缓冲输入流
// 创建一个新的字节缓冲输入流 BufferedInputStream(InputStream in) BufferedInputStream(InputStream in, int size)
(2) 节缓冲输出流
// 将数据写入指定的底层输出流 BufferedOutputStream(OutputStream out) // 将具有指定缓冲区大小的数据写入指定的底层输出流 BufferedOutputStream(OutputStream out, int size)
4.2 字符缓冲流
(1) 缓冲字符输入流
// 创建一个新的缓冲字符输入流 BufferedReader(Reader in) BufferedReader(Reader in, int sz)
(2) 缓冲字符输出流
// 创建一个新的缓冲字符输出流 BufferedWriter(Writer out) BufferedWriter(Writer out, int sz)