-
IO 流的四个抽象基类
IO 流的所有类都是这四个基类的派生
(抽象基类) | 字节流 | 字符流 |
---|---|---|
输入流 | InputStream | Reader |
输出流 | OutputStream | Writer |
-
FileInputStream 类常用方法
1. 读取一个字节
public int read() throws IOException
返回值:返回读取的到字节,若已经读到文件末尾,则返回 -1
异常:IOException - 发生 IO 错误时会抛出此异常
说明:从该输入流中读取一个字节
@Testpublic void readFile01() {// 定义文件所在路径String filePath = "d:\\hello.txt";// 定义用来接收读取到的变量int readData = 0;// 定义文件输入流对象FileInputStream fileInputStream = null;try {// 创建文件输入流对象fileInputStream = new FileInputStream(filePath);// 循环读取文件内容while ((readData = fileInputStream.read()) != -1) {// 输出读取的内容System.out.print((char) readData);}} catch (IOException e) {e.printStackTrace();} finally {// 关闭流, 释放资源try {fileInputStream.close();} catch (IOException e) {e.printStackTrace();}}}
2. 读取一串字节
public int read(byte[] b) throws IOException
参数:b - 用来接收读取到的字节内容
返回值:返回实际读取的到字节数,如果读取完毕,则返回 -1
异常:IOException - 发生 IO 错误时会抛出此异常
说明:从该输入流中读取最多b.length字节的数据到 b 数组
@Testpublic void readFile02() {// 定义文件所在路径String filePath = "d:\\hello.txt";// 定义用来接收读取到的变量int readLength = 0;// 定义字节数组用来接收读取到的字节byte[] buf = new byte[8];// 定义文件输入流对象FileInputStream fileInputStream = null;try {// 创建文件输入流对象fileInputStream = new FileInputStream(filePath);// 循环读取文件内容while ((readLength = fileInputStream.read(buf)) != -1) {// 将字符数组转成字符串输出读取的内容System.out.print(new String(buf,0,readLength));}} catch (IOException e) {e.printStackTrace();} finally {// 关闭流, 释放资源try {fileInputStream.close();} catch (IOException e) {e.printStackTrace();}}}
3. 关闭文件流
public void close() throws IOException
异常:IOException - 发生 IO 错误时会抛出此异常
说明:关闭该输入流,释放资源
-
FileOutputStream 类常用方法
1. 构造器并指定写入方式
public FileOutputStream(String name, boolean append) throws FileNotFoundException
参数:name - 文件路径 append - 写入方式
异常:FileNotFoundException - 如果文件不存在但不能创建,或存在但是是一个目录而不是常规文件,或由于任何其他原因无法打开时会抛出此异常
说明:append 为 true 时,文件写入是以追加的方式写入,append 为 false 时,文件写入是以覆盖的方式写入(不写默认覆盖),且如果指定的文件路径不存在时会创建该文件
2. 写入一个字节
public void write(int b) throws IOException
参数:b - 要写入的字节
异常:IOException - 发生 IO 错误时会抛出此异常
说明:向目标文件以构造器制定的形式写入一个字节
3. 写入一串字节
public void write(byte[] b) throws IOException
参数:b - 要写入的目标字节数组
异常:IOException - 发生 IO 错误时会抛出此异常
说明:向目标文件以构造器制定的形式写入 b 中的数据
4. 写入一串指定的字节
public void write(byte[] b, int off, int len) throws IOException
参数:b - 要写入的目标字节数组 off - 数据中的起始下标偏移量 len - 要写入的长度
异常:IOException - 发生 IO 错误时会抛出此异常
说明:向目标文件以构造器制定的形式写入 b 中的数据,从 off 下标开始写入 len 长度的数据
5. 关闭文件流
public void close() throws IOException
异常:IOException - 发生 IO 错误时会抛出此异常
说明:关闭该输出流,释放资源
@Testpublic void writeFile01() {// 定义文件路径String filePath = "d:\\a.txt";// 定义 FileOutputStream 文件字节输出流对象FileOutputStream fileOutputStream = null;try {// 创建文件字节流输出对象并指定以追加的方式写入fileOutputStream = new FileOutputStream(filePath, true);// 写入一个字节// fileOutputStream.write('a');// 写入字符串, 从下标0开始写入5个进去fileOutputStream.write("Hello World!".getBytes(StandardCharsets.UTF_8), 0, 5);} catch (IOException e) {e.printStackTrace();} finally {// 关闭字节流, 节约资源try {fileOutputStream.close();} catch (IOException e) {e.printStackTrace();}}}
-
文件拷贝
public class FileCopy01 {public static void main(String[] args) {// 拷贝文件FileInputStream fileInputStream = null;FileOutputStream fileOutputStream = null;String filePath = "d:\\hnt.png";String destPath = "d:\\hntCopy.png";byte[] buf = new byte[1024];int read = 0;try {fileInputStream = new FileInputStream(filePath);fileOutputStream = new FileOutputStream(destPath, true);
// while ((read = fileInputStream.read()) != -1) {
// fileOutputStream.write(read);
// }while ((read = fileInputStream.read(buf)) != -1) {fileOutputStream.write(buf, 0, read);}} catch (IOException e) {e.printStackTrace();} finally {try {if (fileInputStream != null) {fileInputStream.close();}if (fileOutputStream != null) {fileOutputStream.close();}} catch (IOException e) {e.printStackTrace();}}}
}