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

Properties

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

主要方法

  • setProperty等同与Map接口中的put , setProperty(String key, String value)

  • 通过键获取值, getProperty(String key)

  • load() 加载配置文件, 加载完毕以后可以通过 getProperty(String key) 取出对应的值

    构造方法

    1. - load(InputStream in)
    2. - load(Reader r)

    示例

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

    构造方法

    1. - store(OutputStream out,String common)
    2. - store(Writer w,String common)

    示例

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

对象的序列化与反序列化

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

ObjectOutputStream(对象序列化)

构造方法

  1. - ObjectOutputStream(OutputStream out)

主要方法

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

示例

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

ObjectInputStream(对象反序列化)

构造方法

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

主要方法

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

示例

  1. FileInputStream fis = new FileInputStream("c:\\person.txt");
  2. //创建反序列化流,构造方法中,传递字节输入流
  3. ObjectInputStream ois = new ObjectInputStream(fis);
  4. //调用反序列化流的方法 readObject()读取对象
  5. Object obj =ois.readObject();
  6. System.out.println(obj);
  7. 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

主要方法

  1. - void print(String str): 输出任意类型的数据, printprintln是原样输出,不去对照码表
  2. - void println(String str): 输出任意类型的数据,自动写入换行操作
  3. - void write() ; 向文件中写入字节, 方法使用和ava.io.Writer一致

示例

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

打印流开启自动刷新

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

打印流复制文本文件

示例

  1. BufferedReader bfr = new BufferedReader(new FileReader("c:\\a.txt"));
  2. PrintWriter pw = new PrintWriter(new FileWriter("d:\\a.txt"),true);
  3. String line = null;
  4. while((line = bfr.readLine())!=null){
  5. pw.println(line);
  6. }
  7. pw.close();
  8. bfr.close();
  9. }

commons_io工具类

  • apache封装的对文件的操作

IO工具类FilenameUtils

主要方法

  1. - getExtension(String path):获取文件的扩展名;
  2. - getName():获取文件名;
  3. - isExtension(String fileName,String ext):判断fileName是否是ext后缀

IO工具类FileUtils

主要方法

  1. - readFileToString(File file):读取文件内容,并返回一个String
  2. - writeStringToFile(File fileString content):将内容content写入到file中;
  3. - copyDirectoryToDirectory(File srcDir,File destDir);文件夹复制
  4. - copyFile(File srcFile,File destFile);文件复制

示例

  1. /*
  2. * FileUtils工具类方法
  3. * static void copyDirectoryToDirectory(File src,File desc)
  4. * 复制文件夹
  5. */
  6. public static void function_3() throws IOException{
  7. FileUtils.copyDirectoryToDirectory(new File("d:\\demo"), new File("c:\\"));
  8. }
  9. /*
  10. * FileUtils工具类的方法
  11. * static void copyFile(File src,File desc)
  12. * 复制文件
  13. */
  14. public static void function_2() throws IOException{
  15. FileUtils.copyFile(new File("c:\\k.jpg"),new File("d:\\k.jpg"));
  16. }
  17. /*
  18. * FileUtils工具类的方法
  19. * static void writeStringToFile(File src,String date)
  20. * 将字符串直接写到文件中
  21. */
  22. public static void function_1() throws IOException{
  23. FileUtils.writeStringToFile(new File("c:\\b.txt"),"我爱Java编程");
  24. }
  25. /*
  26. * FileUtils工具类的方法
  27. * static String readFileToString(File src)读取文本,返回字符串
  28. */
  29. public static void function() throws IOException{
  30. String s = FileUtils.readFileToString(new File("c:\\a.txt"));
  31. System.out.println(s);
  32. }

Java IO(Properties/对象序列化/打印流/commons-io)的更多相关文章

  1. Java学习笔记43(打印流、IO流工具类简单介绍)

    打印流: 有两个类:PrintStream,PrintWriter类,两个类的方法一致,区别在于构造器 PrintStream:构造方法:接收File类型,接收字符串文件名,接收字节输出流(Outpu ...

  2. 16、IO (Properties、序列化流、打印流、CommonsIO)

    Properties集合的特点 * A: Properties集合的特点 * a: Properties类介绍 * Properties 类表示了一个持久的属性集.Properties 可保存在流中或 ...

  3. Java基础-IO流对象之打印流(PrintStream与PrintWriter)

    Java基础-IO流对象之打印流(PrintStream与PrintWriter) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.打印流的特性 打印对象有两个,即字节打印流(P ...

  4. 【译】Java中的对象序列化

    前言 好久没翻译simple java了,睡前来一篇. 译文链接: http://www.programcreek.com/2014/01/java-serialization/ 什么是对象序列化 在 ...

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

    1.Properties类-持久的属性集,可保存在流中或从流中加载,属性列表中每个键及其对应值都是一个字符串 1.1 特点 (1)Hashtable的子类,map集合中的方法都可以用 (2)该集合没有 ...

  6. Java自学第10期——File类与IO流(输入输出流、处理流、转换流、缓冲流、Properties集合、打印流)

    1.IO简介 IO(输入输出)通过java.io包下的类和接口来支持,包下包括输入.输出两种IO流,每种输入输出流又可分为字符流和字节流两大类. 2.File类 File类是io包下与平台无关的文件和 ...

  7. Java基础---IO(二)--File类、Properties类、打印流、序列流(合并流)

    第一讲     File类 一.概述 1.File类:文件和目录路径名的抽象表现形式 2.特点: 1)用来将文件或文件夹封装成对象 2)方便于对文件与文件夹的属性信息进行操作 3)File类的实例是不 ...

  8. Java学习笔记33(IO:打印流,IO流工具类)

    打印流: 有两个类:PrintStream     PrintWriter类,两个类的方法一样,构造方法不一样 PrintStream构造方法:接收File类型,接收字符串文件名,接收字节输出流(Ou ...

  9. 每天进步一点点-Java IO操作-Java Serializable(对象序列化)的理解和总结

    往硬盘文件里写数据 序列化:序列化是将对象转换为容易传输的格式的过程.例如,可以序列化一个对象,然后使用 HTTP 通过 Internet 在客户端和服务器之间传输该对象.在另一端,反序列化将从该流重 ...

随机推荐

  1. 201521123030《Java程序设计》第4周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. 控制可见性的4个访问修饰符 private -- 仅对本类可见 public -- 对所有类 ...

  2. 201521123109 《java程序设计》第14周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. 2. 书面作业 1. MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现自 ...

  3. linux c函数指针的应用

    头文件:1.h #include<stdio.h> int nul_func(); int test1(int a,int b); int test2(int a,int b,int c) ...

  4. python只re模块

    while True: phone_number=input('please input your phone number:') if len(phone_number)==11 \ and pho ...

  5. Hibernate第九篇【组件映射、继承映射】

    前言 到目前位置,我们已经学习了一对一.一对多.多对一.多对多映射了-既然Hibernate是ORM实现的框架,它还提供了组件映射和继承映射..本博文主要讲解组件映射和继承映射 Java主要的类主要有 ...

  6. spark、storm与Hadoop

    1. Storm是什么,怎么做,如何做的更好?Storm是一个开源的分布式实时计算系统,它可以简单.可靠地处理大量的数据流.Storm有很多应用场景,如实时分析.在线机器学习.持续计算.分布式RPC. ...

  7. django的admin或者应用中使用KindEditor富文本编辑器

    由于django后台管理没有富文本编辑器,看着好丑,展示出来的页面不美观,无法做到所见即所得的编辑方式,所以我们需要引入第三方富文本编辑器. 之前找了好多文档已经博客才把这个功能做出来,有些博客虽然写 ...

  8. 西邮linux兴趣小组2014纳新免试题(一)

    [第一关] 题目 0101001001100001011100100010000100011010000001110000000011001111100100000111001100000000000 ...

  9. shell脚本获取文件中key/value的小方法

    方法有N种,awk.sad.grep.cut... 以上几种方式不写了,就写两个不太常用到的. 废话少说,直接上代码: cat a.txt aa.gif=aaaa.gif bb.gif=bbbb.gi ...

  10. js转换字符串为数值的方法

    在js读取文本框或者其他表单数据的时候获得的值是字符串类型的,比如两个文本框a和b,假设获得a的value值为11,b的value值为9 ,那么a.value要小于b.value,由于他们都是字符串形 ...