java回顾之字符流
一、字符流输入reader
方法 | 说明 |
close() | 关闭流资源 |
read() | 读取一个字符 |
read(char[] chs) | 读取一个字符数组的内容 |
1.2、FileReader类
方法 | 说明 |
FileReader(File file) | 使用File对象的路径创建输入流 |
FileReader(String fileName) | 使用字符串路径创建输入流 |
1.3、字符输出流Writer
方法 | 说明 |
close() | 关闭流资源 |
flush() | 刷新 |
write(int c) | 写出一个字符 |
write(char[] cbuf) | 写出一个字符数组的内容 |
write(char[] b, int off, int len) | 写出一个字符数组的一部分 |
write(String str) | 写出一个字符串 |
1.4实现类 FileWriter类
方法 | 说明 |
FileWriter(File file) | 用File对象所表示的路径创建输出流对象 |
FileWriter(String fileName) | File字符串所表示的路径创建输出流对象 |
FileWriter(File file,boolean b) | 用File对象所表示的路径创建输出流对象,true表示续写 |
FileWriter(String fileName,boolean b) | File字符串所表示的路径创建输出流对象,true表示续写 |
常用方法演示:
关闭和刷新
flush()方法作用是把在缓冲区中的内容刷新的文件中,刷新后可以继续使用流对象
close()方法作用是关闭流资源,在关闭之前会自动把缓冲区内容刷新到文件中
通常写法就不调用flush方法,只要在最后调用close就可以了
特殊情况:
比如要做聊天系统,每次说话对方都需要立马接受,不能最后一起刷新,所有需要使用flush方法
1.5、字节流字符流的作用
字节流能够操作任意类型,任意类型底层都是字节,比如图片,MP3, 视频
字符流专门用来操作有中文的文本(只有文本才有字符的概念)
二、IO资源的处理
2.1、JDK7前处理 不断的try。。catch
为什么要处理异常:
IO流的操作本身就有出错的概率,这是无法解决的。
以前throws的意思是如果出错就不管了,这是一个不负责的处理方式
现在使用try..catch的意思是如果出错了,我们就尽量把损失降到最低,开过流要关掉
例子:
买保险。买完保险之后一个人出事的概率并不会降低
当出事之后损失要降到最低。
2.2、JDK7的处理
格式:
try(创建流对象;创建流对象){
IO流操作
}catch(){
}
不需要程序员自己关流了,系统内部实现关流步骤,这种模式可以关好多,比如池子
三、Properties类
3.1、概述
Properties叫做是属性集。其实他是Hashtable的一个子类,所以Properties也是一个双列集合。
Properties有和IO流相关的方法。
Properties键值对都保存字符串,所以这个集合不写泛型。
3.2、构造方法
方法 | 说明 |
public Properties() | 创建一个空的属性列表。 |
方法 | 说明 |
Object setProperty(String key ,String value) | 添加键值对 |
String getProperty(String key) | 根据键获取值 |
stringPropertyNames() | 获取所有的键 |
load(输入流) | 把文件中的键值对数据读到集合中 |
store(输出流,String comments) | 把集合中的键值对保存到文件中 |
把数据保存到文件中(写出)
public class Demo03 {
public static void main(String[] args) throws IOException {
//创建对象
Properties p = new Properties();
//添加键值对
p.setProperty("柳岩", "大鹏");
p.setProperty("赵敏", "张无忌");
//store()把集合中的键值对保存到文件中
p.store(new FileWriter("day16\\aaa\\123.txt"),"....");
}
}
把数据加载到集合里(读取)
public class Demo04 {
public static void main(String[] args) throws IOException {
//创建对象
Properties p = new Properties();
System.out.println("读取前" + p);
//把文件中的数据读取到集合中
p.load(new FileReader("day16\\aaa\\aaa.properties"));
System.out.println("读取后" + p);
}
}
这种思想,在开发中很有用,可以实现解耦合,在不修改源代码的情况下,做出修改数值的操作。
四、ResourceBundle工具类
能够更方便的读取文件。Properties的load方法的。
但是使用这个工具类有前提条件:
1.文件需要是properties类型
2.文件需要保存在src路径下
public class Demo05 {
public static void main(String[] args) {
// ResourceBundle
//获取对象
//参数表示文件名
ResourceBundle bundle = ResourceBundle.getBundle("aaa");
//根据键获取值
String s = bundle.getString("zhangsan");
System.out.println(s);
String s2 = bundle.getString("liuyan");
System.out.println(s2);
//System.out.println(bundle);
//ResourceBundle没有特别的好处,就代码看起来简单。但是必须满足前提条件
}
}