[Day25]IO(Properties、序列化流、打印流、Commons-IO)

本文详细介绍了Java中Properties类的特性,包括其作为持久化属性集的用途,以及与流技术结合的方法。同时,深入探讨了序列化流与反序列化流的工作原理,序列化接口的重要性,以及打印流在输出数据方面的便捷功能。最后,提到了commons-io库中用于文件操作的实用工具。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.Properties类-持久的属性集,可保存在流中或从流中加载,属性列表中每个键及其对应值都是一个字符串

  1.1 特点

  (1)Hashtable的子类,map集合中的方法都可以用  

 

  (2)该集合没有泛型,键值都是字符串

  (3)是一个可以持久化等呃属性集。键值可以存储到集合中,也可以存储到持久化的设备,键值的来源也可以是持久化的设备  

  (4)有和流技术相结合的方法

    void load(InputStream inStream)  把指定流所对应的文件中的数据,读取出来,保存到Properties集合中

    void load(Reader reader)   

    void store(OutputStream out,String comments)  把集合中的数据,保存到指定的流所对应的文件中,参数commonts代表对描述信息

    void store(Writer writer,String comments)  

 

2.序列化流与反序列化流

  2.1 对象序列化流ObjectOutputStream-将Java对象的基本数据类型和图形写入OutputStream,使用OutputStream读取对象,通过在流中使用文件可以实现对象的持久储存

  (1)构造方法

    ObjectOutputStream(OutputStream out)-创建写入指定OutputStream的ObjectOutputStream  

  (2)方法

    void  writeObject(Object)-将指定的对象写入ObjectOutputStream

  2.2 对象反序列化流ObjectInputStream-ObjectInputStream对以前使用ObjectOutputStream写入的基本数据和对象进行反序列化,支持java.io.Serializable接口的对象才能从流读取

  (1)构造方法

    ObjectInputStream(InputStream in)-创建从指定InputStream读取的ObjectInputStream

  (2)方法

    void  readObject()-从ObjectInputStream读取对象

  2.3 序列化接口-当一个对象要能被序列化,这个对象所属的类必须实现Serializable接口。

  (1)若不识闲Serializable接,会发生异常NotSerializableException异常

  (2)当反序列化对象时,如果对象所属的class文件在序列化之后进行的修改,那么进行反序列化也会发生异常InvalidClassException。发生这个异常的原因如下:

    | 该类的序列版本号与从流中读取的类描述符的版本号不匹配

    l  该类包含未知数据类型

    l 该类没有可访问的无参数构造方法

  (3)Serializable标记接口。该接口给需要序列化的类,提供了一个序列版本号。serialVersionUID. 该版本号的目的在于验证序列化的对象和对应类是否版本匹配。

  2.4 瞬态关键字transient-当一个类的对象需要被序列化时,某些属性不需要被序列化,则可以用transient修饰

  (1)静态修饰也不会被序列化,因为序列化是把对象数据进行持久化存储,而静态的属于类加载时的数据,不会被序列化

 

3. 打印流-添加输出数据的功能,使它们能够方便地打印各种数据值表示形式

  3.1 分类

  (1)字节打印流 PrintStream

  (2)字符打印流 PrintWriter

  3.2 方法

  void print(String str): 输出任意类型的数据,

  void println(String str): 输出任意类型的数据,自动写入换行操作

  3.3 打印流完成数据自动刷新-可以通过构造方法,完成文件数据的自动刷新功能

  public PrintWriter(OutputStream out, boolean autoFlush)

  public PrintWriter(Writer out, boolean autoFlush)

 

 

4. commons-IO

  4.1 导入classpath-加入classpath的第三方jar包内的class文件才能在项目中使用

  4.2 FilenamUtils-这个工具类用来处理文件名

  getExtension(String path):获取文件的扩展名;

  getName():获取文件名;

  isExtension(String fileName,String ext):判断fileName是否是ext后缀名;

  4.3 FileUtils-提供文件操作(移动文件,读取文件,检查文件是否存在等)的方法

  readFileToString(File file):读取文件内容,并返回一个String;

  writeStringToFile(File file,String content):将内容content写入到file中;

  copyDirectoryToDirectory(File srcDir,File destDir);文件夹复制

  copyFile(File srcFile,File destFile);文件夹复制

转载于:https://www.cnblogs.com/ERFishing/p/10786846.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值