Java IO 流

缓冲流:

写数据:BufferedOutputStream BufferedWriter

读数据:BufferedInputStream BufferedReader

以字节输入流为例创建高效输出流:

使用缓冲流可以极大的提高文件复制等操作的运行速度,使用缓冲流,本质就是把字节/字符流包装成具有缓冲区的缓冲流。

注意:有缓冲区的输出流在使用过程中需要,刷新缓冲区,内容才会输出

1 缓冲区,存满之后会自动刷新

2 手动刷新缓冲区(未存满) 对象.flush();

3 关闭流时,会自动刷新一次缓冲区

其中,字符缓冲流中有些独特的方法:


其中 newLint() 就是一个换行方法 可以直接在写入需要的内容时直接在后面\n 也有同样的作用

通过高效字符输入流读取内容:

通过高效字符输出流写入内容:

对象流(序列化流):

ObjectOutputStream 序列化流

ObjectInputStream 反序列化流

对象输出流的创建:

对象输入流的创建:

使用对象流进行对象的文件写入与展示

  1. 首先先通过对象输出流,将对象的内容写入文件中

Eg:

  1. 成功将对象写入文件过后,再使用对象输入流,因为对象存入的是数组里面,所以读取内容后,直接将object型的变量强转为对象的类型,随后遍历即可查看写入对象的内容

Eg:

注意:

使用对象流是,所对应的类需要实现serialVersionUID 接口

若是在对象的内容写入文件后,再对对象的成员变量进行修改的后,再次使用对象输入流展示内容时,会显示报错(序列号不同)

这时,我们就需要在给这个类序列化时,直接给定一个序列号值进行绑定

使用对象流的好处:字节序列写出到文件之后,相当于文件中持久保存了一个对象的信息

所以,我们可以通过对象流这个保存对象信息的功能,对前面所学习的对象的增删改查案例进行完善

建包时的规范书写

创建一个接口,提前确实所需要的功能

实现类:

static修饰符的注意事项:

使用static静态代码块 只执行一次(因为指定文件只需创建一次,则可用static静态代码块执行此文件创建)

static修饰的只能调用静态的成员变量,而非static修饰的可以调用静态的和非静态的

Main()方法中调用实现类的add方法,进行对象的添加:

注意:创建字符输出流必须在新的内容添加进集合之后书写 否则会直接清空之前里面的内容(字符输出流创建时就已经调用了父类中的一个write方法从而清空文件内容)

打印流:

字节打印流: PrintStream

字符打印流: PrintWrite

打印流的特点:
  1. 只负责输出数据,不负责读取数据

  2. 永远不会抛出IOException

  3. 有自己的特有方法

PrintWrite的特点:
  1. 自动换行 println()

  2. 不能输出字节 可以输出字节以外的内容

  3. 必须是通过配置 自动刷新 (println,printf,format) boolean autoFlush: true 自动刷新 false,不自动刷新

  4. 包装流本身没有写出功能

  5. 将字节输出流转换字符输出流

字符打印流的特点:

1、只有写数据的,没有读取数据。只能操作目的地,不能操作数据源。

2、可以操作任意类型的数据。

3、如果启动了自动刷新,能够自动刷新。

4、该流是可以直接操作文本文件的。

代码示例:

public class TestPrintStream {

   public static void main(String[] args) throws FileNotFoundException {         PrintStream out = new PrintStream("d:/Test/悯农.txt");         out.print(true);

        out.print("hello");

        out.println("锄禾日当午,");

        out.println("汗滴禾下土.");

     }

}

Properties集合:

Properties底层是hashtable型,所以也是为键值对类型的集合

该集合可以保存或直接在流中加载

输入的属性都为字符串类型

特有方法:

public Object setProperty(String key,String value):添加元素

public String getProperty(String key):获取元素

public Set<String> stringPropertyNames():获取所有的键的集合

代码示例:

public static void test1() throws IOException {
    //创建Properties对象
    Properties properties = new Properties();
    /*properties.put(21,"张三");*/

    //该类扩展的添加键值对方法
    properties.setProperty("21","张三");

    //根据键获取值的方法
    String name = properties.getProperty("21");

    //集合中的数据输出保存
    /*  FileOutputStream out = new FileOutputStream("d:/Test/test.properties");*/
    FileWriter writer = new FileWriter("d:/Test/test.properties");

    properties.store(writer,"This is a exegesis");

}
 
与IO流类似方法:

其中还有一些方法与IO流中的方法有着类似的作用:

使用要求:定义的集合对象必须为properties集合

Load(); 把文件读取到集合中 (inputstream)

Store(): 把集合中的数据存储到文件中 (outputstream)

代码示例:

public static void test2() throws IOException {

    Properties properties = new Properties();
    //加载
    properties.load(new FileReader("d:/Test/test.properties"));

    //展示集合内容
    System.out.println(properties);
    for (Object o : properties.keySet()) {
        System.out.println(properties.get(o));
    }
    
}
注意:使用该集合时,定义文件的后缀必须为.properties结尾

此处字符串里的内容为添加的注释 store(write,””)

添加注释时使用中文会无法显示(会显示中文的16进制型),所以不要使用中文进行注释

其中#后面显示的就为注释的信息

将注释更改成非中文时 文件显示如下:

Properties中储存的都为键值对的形式,可直接在文件中写入内容

书写规范:

  1. 需要一行一行的书写内容 eg:

21=张三

22=李四

否则读取展示集合中内容时,系统会认为写在一行里的内容是一起的

  1. 写入不能写成例如 21-hello-hi 形式的 会无法展示想要的信息内容

  2. 21=张三中的等号(=),即使写成【空格】【-】【,】等也可在展示时显示等号(=)连接键值但是不建议使用,建议使用正常的等号(=) 进行键值的书写

  • 11
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值