IO流
1.IO流概述和分类
- 按数据的流向:
- 输入流:读数据
- 输出流:写数据
- 按照数据类型来分:
- 字节流
- 字节输入流
- 字节输出流
- 字符流
- 字符输入流
- 字符输出流
- 字节流
注意:一般IO流的分类是按照数据类型来分的
2.递归
- 方法定义中调用方法本身的现象
- 解决递归问题需要找到两个内容:
- 递归出口:否则会发生内存溢出
- 递归规则:与原问题相似的规模较小的问题
字节输出流写数据
FileOutputStream:文件输出流用于将数据写入File
- FileOutputStream(String name):创建文件输出流以指定的名称写入文件
使用字节输出流写数据的步骤:
- 创建字节输出流对象(调用系统功能创建对象,创建字节输出流对象,让字节输出流对象指向文件)
- 调用字节输出流对象的写数据方法
- 释放资源(关闭此文件输出流并释放与此流相关联的任何系统资源)
3.字节输出流写数据的三种方式
4.解决用字节输出流写数据的两个问题
/**
* 解决用字节流写数据的两个问题:
* 1.实现换行
* -加上"\r\n".getBytes()
* 2.实现追加(及在文本最后写入数据)
* -使用FileOutputStream(String name, boolean append)
* --append为true,则在文件最后写入数据
* --append为false,则在文件最开始写入数据
*/
5.使用字节输出流写数据时异常的处理
/**
* finally语句保证执行
* 在字节流写数据时处理异常用try{}...catch{}...finally{}写的代码健壮性更好
* 要注意的是:
* 1.将字节输出流定义放在try{}...catch{}...finally{}结构的外面,因为catch{}和finally{}无法直接使用try{}中生成的对象
* 2.将定义在try{}...catch{}...finally{}结构外面的字节输出流对象初始化,初始化的值为null
* 3.finally{}中释放资源前应对字节输出流对象进行判断,如果非空才能进行释放,否则产生空指针异常
*/
字节输入流读数据
6.字节输入流读数据的基本方法
/**
*以下代码实现了单个读取文件中所有字符并打印在控制台
*/
FileInputStream fis = new FileInputStream("path");
int by;
while((by = fis.read()) != -1) {
System.out.print((char)by);
}
7.字节流读数据(一次读一个字节数组数据)
/**
* 字节流读数据(一次读一个字节数组数据)
* 什么是容器?
* 1.创建字节数组,长度为1024的整数倍
* 2.定义一个整数型变量len
* 3.使用read(byte[] b)方法,从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。
* 4.使用String(byte[] n, int offset, int len)将字节数组转化为字符串,再打印出来
*/