写在前面
今天跑去折腾机器学习的环境了,就没有学多少东西,晚上这一个多小时看了点视频,在这也记录一下吧,冒充自己学习了,给自己点心理安慰
今日学习
属性集合
java.io.Properties extends java.util.Hashtable<K,V> implements java.util.Map<K,V>
是唯一一个与IO
流结合的集合,具有持久属性,可保存在六种或从流中加载,属性列表中每个键和对应的值都是字符串,是双列集合。
- 构造方法
Properties prop = new Properties();
- 方法
-
Object setProperty(String key, String value);
添加键值对,调用了Hashtable
的put
方法 -
String getProperty(String key);
根据键获取对应的值,相当于Map
的get()
方法 -
Set<String> stringPropertyNames();
获取属性列表的键集,相当于Map
的ketSet()
方法 -
void store(OutputStream out, String comments);/void store(Writer rt, , String comments);
将集合中的临时数据持久化写入到硬盘中存储
其中OutputStream
代表字节输出流,不可写入中文;Writer
代表字符输出流,可写入中文
comments
表示注释,用来解释说明保存的文件是干什么用的,不能用中文,一般用空字符串
使用步骤:- 创建
Properties
对象 - 创建字节/字符输出流,构造方法中传递写入数据的目的地
- 调用
Properties
对象的store()
方法 - 调用
close()
方法关闭输出流(匿名对象自己就关了,不需要关闭资源这一步)
- 创建
-
void load(InputStream is);/void load(Reader r);
将硬盘中保存的键值对文件数据,读取到集合中
其中InputStream
代表字节输入流,不可读取中文;Reader
代表字符输入流,可读取中文注意:
1. 存储键值对的文件,键与值默认连接符号:=
、空格
、其他符号
2. 可以使用#
注释
3. 文件中默认为字符串,所以不需要加引号使用步骤:
5. 创建Properties
对象
6. 创建字节/字符输入流,构造方法中传递读取数据的数据源
7. 调用Properties
对象的load()
方法
8. 调用close()
方法关闭输出流(匿名对象自己就关了,不需要关闭资源这一步)
9. 遍历Properties
对象
-
缓冲流
基本流的一个增强(即给基本流增加一个缓冲区),提高基本流的效率
字节缓冲流 | BufferedOutputStream | BufferedInputStream |
---|---|---|
字符缓冲流 | BufferedWriter | BufferedReader |
字节输出缓冲流
java.io.BufferedOutputStream extends OutputStream
- 构造方法
BufferedOutputStream(OutputStream out);
创建字节输出缓冲流,将数据写入指定的输出流中BufferedOutputStream(OutputStream out, int size);
创建字节输出缓冲流,将具有指定缓冲区大小的数据写入指定的输出流中
注意:size
是缓冲流内部缓冲区的大小
- 使用步骤
- 创建
FileOutputStream
对象,构造方法中传递写入数据的目的地 - 创建
BufferedOutputStream
对象,构造方法中传递FileOutputStream
对象 - 调用
BufferedOutputStream
对象的write
方法,将数据写入内部缓冲区中 - 调用
BufferedOutputStream
对象的flush
方法,将缓冲区数据刷新到文件中 - 调用
BufferedOutputStream
对象的close
方法,释放资源(先调用flush
刷新数据,因此第4步可以省略)
- 创建
字节输入缓冲流
java.io.BufferedInputStream extends InputStream
- 构造方法
BufferedInputStream(InputStream in);
创建字节输入缓冲流,将数据读取到指定的输入流中BufferedInputStream(InputStream in, int size);
创建字节输入缓冲流,将具有指定缓冲区大小的数据读取到指定的输入流中
注意:size
是缓冲流内部缓冲区的大小
- 使用步骤
- 创建
FileInputStream
对象,构造方法中传递读取数据的数据源 - 创建
BufferedInputStream
对象,构造方法中传递FileInputStream
对象 - 调用
BufferedInputStream
对象的read
方法,将数据读取到内部缓冲区中 - 调用
BufferedInputStream
对象的close
方法,释放资源(调用缓冲流的close
方法可以直接将输入流也关闭)
- 创建
字符输出缓冲流
java.io.BufferedWriter extends Writer
- 构造方法
BufferedWriter (Writer w);
创建字符输出缓冲流,将数据写入指定的输出流中BufferedWriter (Writer w, int size);
创建字符输出缓冲流,将具有指定缓冲区大小的数据写入指定的输出流中
注意:size
是缓冲流内部缓冲区的大小
- 特有成员方法
void newLine()(;
根据不同操作系统写入不同的换行分隔符 - 使用步骤
- 创建
FileWriter
对象,构造方法中传递写入数据的目的地 - 创建
BufferedWriter
对象,构造方法中传递FileWriter
对象 - 调用
BufferedWriter
对象的write
方法,将数据写入内部缓冲区中 - 调用
BufferedWriter
对象的flush
方法,将缓冲区数据刷新到文件中 - 调用
BufferedWriter
对象的close
方法,释放资源(先调用flush
刷新数据,因此第4步可以省略)
- 创建
字符输入缓冲流
java.io.BufferedReader extends Reader
- 构造方法
BufferedReader (Reader r);
创建字符输入缓冲流,将数据读取到指定的输入流中BufferedReader (Reader r, int size);
创建字符输入缓冲流,将具有指定缓冲区大小的数据读取到指定的输入流中
注意:size
是缓冲流内部缓冲区的大小
- 特有的成员方法
String readLine();
读取一行数据,返回该行内容的字符串,不包含任何终止符;若读取到流末尾,则返回null
- 使用步骤
- 创建
FileReader
对象,构造方法中传递读取数据的数据源 - 创建
BufferedReader
对象,构造方法中传递FileReader
对象 - 调用
BufferedReader
对象的read/readLine
方法,将数据读取到内部缓冲区中
注意:调用readLine()
方法格式如下String str; while((str==br.reaadLine())!=null){ System.out.println(str); }
- 调用
BufferedReader
对象的close
方法,释放资源(调用缓冲流的close
方法可以直接将输入流也关闭)
- 创建
小知识点
Map<K,V>
若k
有序,则会自动排序