Stream流的三类方法
Stream流的获取方法
Stream流的常见中间操作方法
Stream流的常见终结操作方法
Stream流的收集操作
Stream流的收集方法
工具类Collectors提供了具体的收集方式
IO就可以对硬盘中的文件进行读写
File表示要读写的文件在哪,也可以对文件进行创建,删除等操作
File类概述和构造方法
File:它是文件和目录路径名的抽象表示
File(String pathname)通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例
File(String parent, String child) 从父路径名字符串和子路径名字符串创建新的 File实例
File(File parent, String child) 从父抽象路径名和子路径名字符串创建新的 File实例
绝对路径和相对路径
File类创建功能
public boolean createNewFile() 创建一个新的空的文件
public boolean mkdir() 创建一个单级文件夹
public boolean mkdirs() 创建一个多级文件夹
File类删除功能
public boolean delete() 删除由此抽象路径名表示的文件或目录
删除目录时的注意事项:
File类判断和获取功能
public boolean isDirectory() 测试此抽象路径名表示的File是否为目录
public boolean isFile() 测试此抽象路径名表示的File是否为文件
public boolean exists() 测试此抽象路径名表示的File是否存在
public String getAbsolutePath() 返回此抽象路径名的绝对路径名字符串
public String getPath() 将此抽象路径名转换为路径名字符串
public String getName() 返回由此抽象路径名表示的文件或目录的名称
File类高级获取功能
public File[] listFiles() 返回此抽象路径名表示的目录中的文件和目录的File对象数组
listFiles方法注意事项:
I表示intput,是数据从硬盘进内存的过程,称之为读。
O表示output,是数据从内存到硬盘的过程。称之为写。
字节流写数据
字节流写数据的3种方式
void write(int b) 一次写一个字节数据
void write(byte[] b) 一次写一个字节数组数据
void write(byte[] b, int off, int len) 一次写一个字节数组的部分数据
字节流写数据实现换行
写完数据后,加换行符windows:\r\n linux:\n
字节流写数据实现追加写入
字节流写数据加try…catch异常处理
异常处理标准格式:try….catch…finally
字节流读数据(一次读一个字节)
提高拷贝速度的解决方案:为了解决速度问题,字节流通过创建字节数组,可以一次读写多个数据。
一次读一个字节数组的方法:
字节流缓冲流
字节缓冲流:
构造方法:
为什么构造方法需要的是字节流,而不是具体的文件或者路径呢?
把文件中的数据读取到内存时,如果此时文件中出现了中文,那么字节流就会出现乱码现象。所以纯文本的文件,我们就需要使用字符流来进行操作。
编码表
计算机中储存的信息都是用二进制数表示的;我们在屏幕上看到的英文、汉字等字符是二进制数转换之后的结果
按照某种规则,将字符存储到计算机中,称为编码。
按照同样的规则,将存储在计算机中的二进制数解析显示出来,称为解码 。
编码和解码的方式必须一致,否则会导致乱码。
ASCII(American Standard Code for Information Interchange,美国信息交换标准代码):包括了数字,大小写字符和一些常见的标点符号。注意:ASCII码表中是没有中文的。
GBK:window系统默认的码表。兼容ASCII码表,也包含了21003个汉字,并支持繁体汉字以及部分日韩文字。注意:GBK是中国的码表,一个中文以两个字节的形式存储。但不包含世界上所有国家的文字。
Unicode码表:由国际组织ISO 制定,是统一的万国码,计算机科学领域里的一项业界标准,容纳世界上大多数国家的所有常见文字和符号。但是因为表示的字符太多,所以Unicode码表中的数字不是直接以二进制的形式存储到计算机的,会先通过UTF-7,UTF-7.5,UTF-8,UTF-16,以及 UTF-32的编码方式再存储到计算机,其中最为常见的就是UTF-8。注意: Unicode是万国码,以UTF-8编码后一个中文以三个字节的形式存储
字符串中的编码解码问题
编码:
解码:
字符流读取中文的过程
字符流 = 字节流 + 编码表
基础知识:不管是在哪张码表中,中文的第一个字节一定是负数。
想要进行拷贝,一律使用字节流或者字节缓冲流
想要把文件中的数据读到内存中打印或者读到内存中运算,请使用字符输入流。想要把集合,数组,键盘录入等数据写到文件中,请使用字符输出流
GBK码表一个中文两个字节,UTF-8编码格式一个中文3个字节。
字符流写数据
字符流写数据的5种方式
void write(int c) 写一个字符
void write(char[] cbuf) 写入一个字符数组
void write(char[] cbuf, int off, int len) 写入字符数组的一部分
void write(String str) 写一个字符串
void write(String str, int off, int len) 写一个字符串的一部分
flush() 刷新流,还可以继续写数据
close()关闭流,释放资源,但是在关闭之前会先刷新流。一旦关闭,就不能再写数据
字符流读数据的2种方式
int read() 一次读一个字符数据
int read(char[] cbuf) 一次读一个字符数组数据
字符缓冲流
字符缓冲流特有功能
BufferedWriter:
复制文件的异常处理
转换流就是来进行字节流和字符流之间转换的
转换流的使用场景在JDK11之前,指定编码读写
可以把对象以字节的形式写到本地文件,直接打开文件,是读不懂的,需要再次用对象操作流读到内存中。
用对象序列化流序列化了一个对象后,假如我们修改了对象所属的Javabean类,读取数据会不会出问题呢?
Properties作为集合的特有方法:
Object setProperty(String key, String value) 设置集合的键和值,都是String类型,底层调用 Hashtable方法 put
String getProperty(String key) 使用此属性列表中指定的键搜索属性
Set stringPropertyNames()从该属性列表中返回一个不可修改的键集,其中键及其对应的值是字符串
Properties和IO流结合的方法:
void load(InputStream inStream) 从输入字节流读取属性列表(键和元素对)
void load(Reader reader) 从输入字符流读取属性列表(键和元素对)
void store(OutputStream out, Stringcomments)将此属性列表(键和元素对)写入此 Properties表中,以适合于使用 load(InputStream)方法的格式写入输出字节流
void store(Writer writer, String comments) 将此属性列表(键和元素对)写入此 Properties表中,以适合使用 load(Reader)方法的格式写入输出字符流