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流相关的方法。
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); } }
这种思想,在开发中很有用,可以实现解耦合,在不修改源代码的情况下,做出修改数值的操作。
四、
能够更方便的读取文件。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没有特别的好处,就代码看起来简单。但是必须满足前提条件 } }