123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- IO流
- I input 输入
- O Output 输出
- 流:Stream是一种抽象的概念,是对数据传输的总称,
- 也就是说数据在设备直接进行传输就称为流。流的本质是数据传输。
- IO流就是用来处理设备之间的传输问题的,比较常见的应用:文件上传、文件下载、文件复制
- 基础流:
- IO流的分类:
- 按照流向分类
- 输入流:读数据
- 输出流:写数据
- 按照流的数据类型分类:
- 字节流
- 字节输入流
- 字节输出流
- 字符流
- 字符输入流
- 字符输出流
- IO流的使用场景
- 如果操作的是纯文本文件,优先使用字符流
- 如果操作的是图片、视频、音频、有格式文本等等二进制文件,那么一定要使用字节流。
- 如果操作的文件类型不确定,优先使用字节流。
- 字节流:
- 字节流基类(父类):
- InputStream 这个抽象类是所有字节输入流类的父类
- OutputStream 这个抽象类是所有字节输出流类的父类
- 文件字节输入流:FileInputStream 是InputStream的子类,专门用来做文件的输入操作
- 它操作文件数据的方法:read()
- 文件字节输出流:FileOutputStream 是OutputStream的子类,专门用来做文件的输出操作
- 它操作文件数据的方法:write()
- write(int b) 写入一个字节
- write(byte[] bytes) 写入一个字节数组
- write(byte[] bytes,int off,int len) 写入一个字节数组,从off开始写入len长度个字节。
- //Windows系统换行 \r\n
- 案例:
- 结合23种设计模式中的模板模式,实现如下操作:
- 调用该方法并传入参数后,会在D盘中创建《title》.txt文件,并在文件中自动写出文章。
- public static boolean AutoWriting(String title){
- return true;
- }
- -[模板设计模式]
- 把抽象类整体看成一种模板,模板种不能决定的东西都定义为抽象方法。
- 让使用模板的类(继承抽象类的类),去重写抽象方法,自己实现需求。
- 模板设计模式的优势:
- 模板已经定义了通用的结构,使用的人只需要关心自己要实现的功能就可以了。
- abstract class 作文模板类{
- public void write(){
- System.out.println("《我的爸爸》");
- body();
- System.out.println("啊~这就是我的爸爸!");
- }
- public abstract void body();
- }
- 处理流:
- 基于基础流进行的强化,比如缓冲流。因为是对基础流的强化,所以创建处理流的时候,构造方法的参数是基础流对象
- 字节缓冲流
- |-字节缓存输入流 BufferedInputStream
- new BufferedInputStream(new FileInputStream());
- |-字节缓存输出流 BufferedOutPutStream
- 字符缓冲流
- 字符流:
- 字符流=字节流+字符编码表
- 字符编码表--字符集
- 字符集是一个系统支持的所有字符的集合,包括各个国家的文字、标点符号、图形符号、数字等等
- 计算机想要准确的存储和识别各种字符集符号,就需要进行字符编码,一套字符集必须要有一套编码表。
- 常见的字符集:ASCII字符集,GB-XXXX字符集 Unicode字符集
- 把字符串转换为字节的方法:
- byte[] getBytes(); 使用平台默认的字符集把String类型字符串转换为一系列字节。
- byte[] getBytes(String charsetName); 使用指定的字符集把String类型字符串转换为一系列字节。
- new String(byte[] bytes); 使用平台默认的字符集把一系列字节转换为String类型字符串
- new String(byte[] bytes,charsetName);使用指定的字符集把一系列字节转换为String类型字符串
- 字符流:
- 输入字符流-抽象类 Reader
- |-文件输入字符流 FileReader
- |-构造方法:
- |- new FileReader(File file)
- |- new FileReader(String fileName)
- |-成员方法:
- |- int read() 一次读取一个字符数据
- |- int read(char[] cbuf) 一次读取一个字符数组数据
- 输出字符流-抽象类 Writer
- |-文件输出字符流 FileWriter
- |-构造方法:
- |- new FileWriter(File file)
- |- new FileWriter(File file,boolean append)
- |- new FileWriter(String pathName)
- |- new FileWriter(String pathName,boolean append)
- |-普通方法:
- |- void write(int c) 写一个字符
- |- void write(char[] cbuf) 写一个字符数组
- |- void write(String str) 写一个字符串
- |- void write(String str,int off,int len) 写一个字符串的一部分
- |- flush() 刷新流,刷新后还可以继续写数据。
- |- close() 关闭流
- 案例需求: 用户注册
- - 编写方法代码,实现用户的用户名和密码保存到本地实现永久化存储
- public static boolean registerUser(String username,String password){
- return false;
- }
- - 实现步骤
- - 获取用户输入的用户名和密码
- - 将用户输入的用户名和密码写入到本地文件中
- - 关流,释放资源
- 处理流:
- 基于基础流进行的强化,比如缓冲流。因为是对基础流的强化,所以创建处理流的时候,构造方法的参数是基础流对象
- 字符缓冲流
- |- 字符缓冲输入流
- BufferedReader
- |-特有方法:String readLine() 读取一行文字,结果包含行的内容的字符串,不包含任何终止字符,如果已经到达流的结尾,则为null。
- |- 字符缓冲输出流
- BufferedWriter
- |-特有方法:void newLine() 写一行行分隔符,行分隔符字符串有系统属性定义。
|