专栏首页李家的小酒馆Java IO(Properties/对象序列化/打印流/commons-io)

Java IO(Properties/对象序列化/打印流/commons-io)

Java IO(Properties/对象序列化/打印流/commons-io)

Properties

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

主要方法

  • setProperty等同与Map接口中的put , setProperty(String key, String value)
  • 通过键获取值, getProperty(String key)
  • load() 加载配置文件, 加载完毕以后可以通过 getProperty(String key) 取出对应的值 构造方法
 - load(InputStream in)      
 - load(Reader r)

示例

       Properties pro = new Properties();                       
       FileReader fr = new FileReader("c:\\pro.properties");                         
       //调用集合的方法load,传递字符输入流                         
       pro.load(fr);                         
       String name = pro.getProperty("name");                         
       fr.close();                         
       System.out.println(pro);
  • store() 将Properties中的键值对写入到文件中保存

构造方法

 - store(OutputStream out,String common)  
 - store(Writer w,String common)   

示例

         Properties pro = new Properties();                     
         pro.setProperty("name", "zhangsan");                     
         pro.setProperty("age", "31");                     
         pro.setProperty("email", "123456789@163.com");                     
         FileWriter fw = new FileWriter("c:\\pro.properties");                     
         //键值对,存回文件,使用集合的方法store传递字符输出流                     
         pro.store(fw, "");   // 后面一个为注释                     
         fw.close();

对象的序列化与反序列化

序列化为将对象的信息存储到文件中,反序列化为将文件存储的对象信息读取出来.

ObjectOutputStream(对象序列化)

构造方法

- ObjectOutputStream(OutputStream out)  

主要方法

- writeObject(Object obj)写出对象的方法

示例

                        //创建字节输出流,封装文件
                    FileOutputStream fos = new FileOutputStream("c:\\person.txt");
                    //创建写出对象的序列化流的对象,构造方法传递字节输出流
                    ObjectOutputStream oos = new ObjectOutputStream(fos);
                    Person p = new Person("lisi",25);
                    //调用序列化流的方法writeObject,写出对象
                    oos.writeObject(p);
                    oos.close();

ObjectInputStream(对象反序列化)

构造方法

- ObjectInputStream(InputStream in)   // 传递任意的字节输入流,输入流封装文件,必须是序列化的文件

主要方法

- Object readObject()  读取对象 , 读取出来的对象为Object

示例

                    FileInputStream fis = new FileInputStream("c:\\person.txt");
                    //创建反序列化流,构造方法中,传递字节输入流
                    ObjectInputStream ois = new ObjectInputStream(fis);
                    //调用反序列化流的方法 readObject()读取对象
                    Object obj =ois.readObject();
                    System.out.println(obj);
                    ois.close();

序列化与反序列化过程中注意事项

  • 静态变量不能被序列化 因为序列化是把对象数据进行持久化存储,而静态的东西不属于对象,而属于类
  • transient(瞬态)关键字,被transient修饰的成员变量不会被序列化
  • Serializable接口, 需要序列化的类必须实现这个接口才可以被序列化
  • 序列化中的序列号冲突问题, 对象实现Serializable接口接口后,会给对象创建一个serialVersionUID用作标识对象,如果更改了源代码,则这个表示会改变, 在反序列化的时候java会对比文件和类的的标识是否对应,如果不对应就会报错
    • 解决方法 : 给类自定义serialVersionUID, private static final long serialVersionUID = 1478652478456L;

打印流

  • 只负责输出数据,使它们能够方便地打印各种数据值表示形式.
  • 打印流的分类
    • PrintStream
    • PrintWriter
  • 打印流的特点
    • 不负责数据源,只负责数据目的(只提供输操作)
    • 永远不会抛出IOException,但是可能抛出别的异常
    • 两个打印流的方法,完全一致
    • 构造方法,就是打印流的输出目的端
    • PrintStream构造方法 : 接收File类型,接收字符串文件名,接收字节输出流OutputStream
    • PrintWriter构造方法 : 接收File类型,接收字符串文件名,接收字节输出流OutputStream, 接收字符输出流Writer

主要方法

- void print(String str): 输出任意类型的数据,       print和println是原样输出,不去对照码表 

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

- void write()    ;    向文件中写入字节, 方法使用和ava.io.Writer一致

示例

                        File file = new File("c:\\1.txt");
                    PrintWriter pw = new PrintWriter(file);
                    pw.println(100);   // 100
                    pw.write(100);     // b
                    pw.close();

打印流开启自动刷新

                                /* 
                 * 打印流,可以开启自动刷新功能
                 * 满足2个条件:
                 *   1. 输出的数据目的必须是流对象
                 *       OutputStream  Writer
                 *   2. 必须调用println,printf,format三个方法中的一个,启用自动刷新
                 */
                public static void function_3()throws  IOException{
                    //File f = new File("XXX.txt");
                    FileOutputStream fos = new FileOutputStream("c:\\5.txt");
                    PrintWriter pw = new PrintWriter(fos,true);
                    pw.println("i");
                    pw.println("love");
                    pw.println("java");
                    pw.close();
                }

打印流复制文本文件

示例

                        BufferedReader bfr = new BufferedReader(new FileReader("c:\\a.txt"));
                        PrintWriter pw = new PrintWriter(new FileWriter("d:\\a.txt"),true);
                        String line = null;
                        while((line = bfr.readLine())!=null){
                            pw.println(line);
                        }
                        pw.close();
                        bfr.close();
                    }

commons_io工具类

  • apache封装的对文件的操作

IO工具类FilenameUtils

主要方法

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

- getName():获取文件名;

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

IO工具类FileUtils

主要方法

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

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

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

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

示例

                /*
                 * FileUtils工具类方法
                 * static void copyDirectoryToDirectory(File src,File desc)
                 * 复制文件夹
                 */
                public static void function_3() throws IOException{
                    FileUtils.copyDirectoryToDirectory(new File("d:\\demo"), new File("c:\\"));
                }
                
                /*
                 * FileUtils工具类的方法
                 * static void copyFile(File src,File desc)
                 * 复制文件
                 */
                public static void function_2() throws IOException{
                    FileUtils.copyFile(new File("c:\\k.jpg"),new File("d:\\k.jpg"));
                }
                
                /*
                 * FileUtils工具类的方法
                 * static void writeStringToFile(File src,String date)
                 * 将字符串直接写到文件中
                 */
                public static void function_1() throws IOException{
                    FileUtils.writeStringToFile(new File("c:\\b.txt"),"我爱Java编程");
                }
                
                /*
                 * FileUtils工具类的方法
                 * static String readFileToString(File src)读取文本,返回字符串
                 */
                 public static void function() throws IOException{
                     String s = FileUtils.readFileToString(new File("c:\\a.txt"));
                     System.out.println(s);
                 }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • IO基础内容(File)

    JavaIO基础内容 IO技术概述 Output 把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作 Input 把持久设备上的数据读取到内...

    李家酒馆酒保
  • Java简单实现UDP和TCP

    TCP实现 TCP协议需要在双方之间建立连接,通过输入输出流来进行数据的交换,建立需要通过三次握手,断开需要四次挥手,保证了数据的完整性,但传输效率也会相应的降...

    李家酒馆酒保
  • UDP和TCP的区别

    UDP(User Data Protocol,用户数据报协议)   UDP是一个无连接,不保证可靠性的传输层协议,也就是说发送端部关心发送的数据是否到达目标主机...

    李家酒馆酒保
  • Python3之弹性力学——应力张量2

    \[ \sigma_{11}=3,\quad\sigma_{12} = \sigma_{13} = 1, \quad \sigma_{22} = \sigma_...

    py3study
  • 移动互联网和大数据时代下的IT企业变革之道-敏捷思维

    如腾讯董事会主席马化腾指出互联网的出现犹如蒸汽机和电的发明,已经彻底改变了世界的模式;而移动互联网的出现更像人类新的DNA,从本质上蜕变催生出一个新的世界。人类...

    华章科技
  • 几个命令了解ELF文件的”秘密“

    在Linux中,可执行文件的格式是ELF格式,而有一些命令可以帮助我们了解它们更多的“秘密”,以此来帮助我们解决问题。

    编程珠玑
  • C语言程序编译成可执行文件的过程

    现在我们将执行以下命令将源文件(hello.c)转化为可执行目标文件(hello):

    魔王卷子
  • 如何让你的程序支持管道输入

    其实很简单,管道是通过stdin和stdout来传给程序的。

    雷大亨
  • 认识一位大佬,在微信团队工作了8年

    今天给大家推荐一个技术大牛:大飞,也就是我前两天转载《一行代码引发的恐惧》的作者,文章写的特别棒。

    纯洁的微笑
  • 图书勘误-2

    江南一点雨

扫码关注云+社区

领取腾讯云代金券