java回顾之字符流

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没有特别的好处,就代码看起来简单。但是必须满足前提条件
    }
}

  

原文地址:https://www.cnblogs.com/gushiye/p/13861046.html