• 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);
    				 }
    
  • 相关阅读:
    [CTF]Capture The Flag -- 夺旗赛
    [DesignPattern]Builder设计模式
    [Git]Git 常用的操作命令
    给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]
    QT 实现 读取 增加 删除 实时操作xml
    QT5-图形视图框架
    C++之QT
    ,即双方交锋的次数。随后N行,每行给出一次交锋的信息,即甲、乙双方同时给出的的手势。C代表“锤子”、J代表“剪刀”、B代表“布”,第1个字母代表甲方,第2个代表乙方,中间有1个空格。
    要获得一个C语言程序的运行时间,常用的方法是调用头文件time.h,其中提供了clock()函数,可以捕捉从程序开始运行到clock()被调用时所耗费的时间。这个时间单位是clock tick,即“时钟打点”。同时还有一个常数CLK_TCK,给
    给定N个非0的个位数字,用其中任意2个数字都可以组合成1个2位的数字。要求所有可能组合出来的2位数字的和。例如给定2、5、8,则可以组合出:25、28、52、58、82、85,它们的和为330。
  • 原文地址:https://www.cnblogs.com/liyuhui-Z/p/7708880.html
Copyright © 2020-2023  润新知