zoukankan      html  css  js  c++  java
  • 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);
    				 }
    
  • 相关阅读:
    Python处理时间 time && datetime 模块
    破解Mysql数据库密码
    JS一定要放在Body的最底部么?
    jQuery 层次选择器
    关于jquery中html()、text()、val()的区别
    解读JSP的解析过程
    JavaScript字符串分割方法
    maven install与maven package 的区别
    JSP起源、JSP的运行原理、JSP的执行过程
    Chrome隐身模式有什么用
  • 原文地址:https://www.cnblogs.com/liyuhui-Z/p/7708880.html
Copyright © 2011-2022 走看看