IO流
Input:输入流,用于读取数据
Output:输出流,用于写数据
IO分类
字节流
字节流就是读和取都是以字节【byte】为单位
InputStream【抽象类
FileInputStream【文件输入流】
案例:读取一个txt文件数据
BufferedInputStream【带缓冲区的输入流】
SequenceInputStream【系列流,可以把多个字节流封装到系列流,方便读】
ObjectInputStream【对象输入流,读取对象,读的对象必须实现Serializable系列化接口】
DataInputStream【数据输出流,这个可以按int,long的字节数来读取】
OutputStream【抽象类】
FileOutputStream【文件输出流】
案例:往一个abc.txt文件写数据
BufferedOutputStream【带缓冲区的输出流】
ByteArrayOutputStream【字节数据输出流,这个不需要关联文件,不需要关流,这个类把数据写在内存,不是在写文件】
ObjectOutputStream【对象输出流,写入对象到文件,写的对象必须实现Serializable系列化接口】
DataOutputStream【数据输出流,这个可以按int,long的字节数来存储】
PrintStream【打印字节流,把数据打印在控制台console】【System.out,把字节转成字符串】
案例:拷贝图片和音频
字节数组拷贝之available()方法
案例:正确的拷贝文件的方法
练习:图片加密
练习:根据用户输入的文件拷贝文件到当前项目目录
练习:录入数据拷贝到文件
缓冲区:就是一个字节数组byte[]
为什么要定义一个字节数组的缓冲区?【原因:提高文件读和写的效率】
字符流
字符流就是读和取都以字符【char】为单位
字符流内部也是先读取字节,把字节转成字符
Reader【字符输入流,抽象类】
FileReader【文件字符输入流】
案例:使用FileReader 读取一个文本数据
BufferedReader【带缓冲区的字符输入流】
LineNumberReader【可以获取行号,它是BufferedReader的子类】
InputStreamReader
Writer【字符输出流,抽象类】
FileWriter【文件字符输出流】
案例:使用FileWrite写入数据
BufferedWriter【带缓冲区的字符输出流】
PrintWriter【打印字符流】
案例:字符流的拷贝
自定义字符数组的拷贝
案例:将文本反转
练习:获取文本上字符出现的次数
递归
递归:文件目录
练习:从键盘输入接收一个文件夹路径,打印出该文件夹下所有的.jpg文件名
BufferedReader和BufferedWriter,内部都【字符缓冲区数组】char[] cf;
装饰设计模式
装饰模式的实现方式
1.装饰对象和真实对象有相同的接口。
2.装饰对象包含一个真实对象的引用(reference)
3.装饰对象的所有方法,内部实现都是通过真实对象的引用来调用,然后实现自己的功能