JAVASE基础学习第九天

这篇博客详细介绍了Java中的字符输出流、缓冲流、转换流和序列流的概念及用法。包括Writer类、FileWriter类的常用方法,以及BufferedReader和BufferedWriter的特殊方法如readLine()和newLine()。还讨论了字符编码和转换流的作用,强调了输入输出编码的一致性以避免乱码。最后提到了序列化和反序列化,以及Properties类在处理键值对数据时的应用。
摘要由CSDN通过智能技术生成

今天学习了字符输出流,缓冲流,转换流,序列流,properties类虽然学的有点多但是都很简单,把学过的代码敲一遍就好了
时间:2022/4/23

字符输出流父类Writer

方法说明
close()关闭流资源
flush()刷新
write(int c)输出一个字符
write(char[] cbuf)输出字符数组
write(char[] b, int off, int len)输出字符数组的一部分
write(String str)输出一个字符串(跟字节数组的区别)

FileWriter类(必须关闭才能见到内容)

方法说明
FileWriter(File file)创建字符输出流指向文件路径
FileWriter(String fileName)创建字符输出流指向文件路径
FileWriter(File file,boolean b)创建字符输出流指向文件路径,续写
FileWriter(String fileName,boolean b)创建字符输出流指向文件路径,续写

刷新和关闭:
字符输出流在用完之后必须要记住关流close()
​关流的方法内部会帮我们先调用刷新,把缓冲器中的数据刷新到的硬盘上
缓冲效果

缓冲流

有哪些缓冲流:
每个普通文件流都有对应的缓冲流:
FileInputStream —> BufferedInputStream[没用]
FileOutputStream —> BufferedOutputStream[没用]
FileReader —> BufferedReader[特殊方法]
FileWriter —> BufferedWriter[特殊方法]

字节缓冲流[了解]
字节缓冲流,和普通字节流方法完全一致, 设计的效果是为了提高效率,但是我们其实不用他
public BufferedInputStream(InputStream in) :创建一个新的缓冲输入流。 public BufferedOutputStream(OutputStream out) :创建一个新的缓冲输出流。

字符缓冲流
public BufferedReader(Reader in) :创建一个新的缓冲输入流。
public BufferedWriter(Writer out) :创建一个新的缓冲输出流。

字符缓冲流特有方法:
BufferedReader:
public String readLine() : 读一行文字。
BufferedWriter:
public void newLine() : 写换行,由系统属性定义符号

/*
* abc.txt的内容
* abc
*我你他
* */
    public static void main(String[] args) throws IOException {
        BufferedReader bufferedReader = new BufferedReader(new FileReader("day21\\abc.txt"));
       //String s;
       //while ((s=bufferedReader.readLine()) != null) {
       //    System.out.println(s);
       //}
        //上面效果与下面相同
       // String s1 = bufferedReader.readLine();
       // System.out.println(s1);
       // String s2 = bufferedReader.readLine();
       // System.out.println(s2);
       // bufferedReader.close();
        BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("day21\\abc.txt"));
        bufferedWriter.write(97);
        bufferedWriter.newLine();
        bufferedWriter.write("我");
         bufferedWriter.close();
    }

转换流

编码表
idea默认使用的码表是UTF-8
windows10之后默认使用的码表也是UTF-8 有些window7默认使用的码表有可能是GBK

码表介绍
构造方法
InputStreamReader(InputStream in) : 创建一个使用默认字符集的字符流。

InputStreamReader(InputStream in, String charsetName) : 创建一个指定字符集的字符流

OutputStreamWriter(OutputStream in) : 创建一个使用默认字符集的字符流。

OutputStreamWriter(OutputStream in, String charsetName) : 创建一个指定字符集的字符流

    public static void main(String[] args) throws IOException {
        // InputStreamReader gbk = new InputStreamReader(new FileInputStream("day21\\abc.txt"), "UTF-8");
        // int i;
        // while ((i= gbk.read()) != -1) {
        //     System.out.println(((char) i));
        // }
        // gbk.close();

        OutputStreamWriter gbk = new OutputStreamWriter(new FileOutputStream("day21\\abc.txt"), "GBK");
        gbk.write(97);
        gbk.write("我");
        gbk.write("你");
        gbk.close();
        InputStreamReader gbk1 = new InputStreamReader(new FileInputStream("day21\\abc.txt"), "UTF-8");
        int i;
        while ((i = gbk1.read()) != -1) {
            System.out.println(((char) i));
        }
        gbk1.close();
    }

注意输入和输出的编码必须保持一直否则会乱码,如下图所示输出位GBK,输入位UTF-8
乱码

序列流

序列化:
把java中的对象输出到硬盘文件中保存
反序列化:
把硬盘文件中的对象读取到java中来

ObjectOutputStream类
构造方法:
public ObjectOutputStream(OutputStream out) : 创建一个指定的ObjectOutputStream
写出对象的方法:
public final void writeObject (Object obj) : 将指定的对象写出。

ObjectInputStream类
构造方法:
public ObjectInputStream(InputStream in) :创建一个指定的ObjectInputStream
读取对象的方法:
public final Object readObject() : 读取一个对象。

什么时候用序列流
要把对象类型的数据输出到文件中就需要用序列流
比如单机游戏的存档。

对象操作流的注意问题
Serializable是序列化接口。
这个接口里面没有抽象方法,把这种没有方法的接口叫标记型接口
实现了这个接口,系统自动给这个类分配一个随机的序列号

transient关键字
transient叫瞬态关键字,如果给变量加瞬态,表示这个变量不会被序列化

private transient int age;

serialVersionUID编号
每个类都有一个序列号,这个类每次修改都会自动改变序列号。
如果序列化和反序列化的编号不一致,反序列化就会出错。

我们可以手动给类写一个序列号,让类的序列号固定。不会再系统随机分配了

private static final long serialVersionUID = -684923423527710L;

Properties类

Properties其实是一个双列集合。
Properties是Hashtable的子类。
Properties不写泛型,他的键值对都是字符串.
Properties可以和IO流配合和硬盘传输键值对的数据

xxx.properties是一种配置文件格式,专门用来保存键值对数据。
配置文件就是保存软件的一些软件信息的文件

构造方法

构造方法说明
new Properties()创建一个空的属性列表。

常用方法

方法说明
String getProperty(String key)根据键获取值
load(输入流)读取文件的键值对数据
font=console
size=18
public static void main(String[] args) throws IOException {
        //读取文件中的键值对到java中
        //创建Properties对象
        Properties p = new Properties();
        //读取文件中数据
        p.load(new FileReader("day11\\config.properties"));
        //读取完之后文件中的键值对就已经到集合中
        //通过键获取值
        String font = p.getProperty("font");
        String size = p.getProperty("size");
        //输出
        System.out.println("字体是" + font);
        System.out.println("大小是" + size);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皇家小黄

创作不易!!!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值