• Java——Properties集合,Object序列化流与反序列化流,打印流,commons-IO文件工具类


    一、properties集合

    集合对象Properties类,继承Hashtable,实现Map接口,可以和IO对象结合使用,实现数据的持久存储。

    特点:

    1. Hashtable的子类,map集合中的方法都可以用。
    2. 该集合没有泛型。键值都是字符串。
    3. 它是一个可以持久化的属性集。键值可以存储到集合中,也可以存储到持久化的设备(硬盘、U盘、光盘)上。键值的来源也可以是持久化的设备。
    4. 有和流技术相结合的方法。

    1、基本使用

    private static void func() {
        //没有泛型
        Properties pro = new Properties();
        //使用setProperty设置键值对,等同Map接口的set
        pro.setProperty("a", "1");
        pro.setProperty("b", "2");
        pro.setProperty("c", "3");
        System.out.println(pro);    //{a=1, b=2, c=3}
    
        //由键获取值,等同Map接口的get
        String v = pro.getProperty("c");
        System.out.println(v);
    
        //方法stringPropertyNames,将集合中的键存储到Set集合,类似于Map接口的方法keySet
        Set<String> set = pro.stringPropertyNames();
        for(String k : set){
            System.out.println(k+"..."+pro.getProperty(k));
        }
    }
    

    2、读取文件中的键值对保存到集合

    /*
     * Properties集合特有方法 load
     * load(InputStream in)
     * load(Reader r)
     * 传递任意的字节或者字符输入流
     * 流对象读取文件中的键值对,保存到集合
     */
    private static void func() throws IOException {
        //实例化properties集合
        Properties pro = new Properties();
        //实例化字符/字节输入流
        FileReader fr = new FileReader("/home/x54256/桌面/pro.properties");
        //读取数据,保存到Propertie集合中
        pro.load(fr);
        //关闭文件
        fr.close();
        //打印
        System.out.println(pro);    // {name=x5456, age=23, email=123@qq.com}
    }
    

    文件格式

    name=x5456
    age=23email=123@qq.com

    3、存到文件中

    /*
     * Properties集合的特有方法store
     * store(OutputStream out)
     * store(Writer w)
     * 接收所有的字节或者字符的输出流(需要flush),将集合中的键值对,写回文件中保存
     */
    private static void func() throws IOException {
        Properties pro = new Properties();
        pro.setProperty("name","x5456");
        pro.setProperty("age","12");
        pro.setProperty("email","123@gmail.com");
    
        //键值对格式存回文件,使用集合的方法store传递字符输出流
        FileOutputStream fos = new FileOutputStream("/home/x54256/桌面/1.txt");
        pro.store(fos,"save msg");
        fos.close();
    }
    

    二、序列化流与反序列化流

    用于从流中读取对象的操作流ObjectInputStream 称为反序列化流,用于向流中写入对象的操作流ObjectOutputStream 称为序列化流

    • 特点:用于操作对象。可以将对象写入到文件中,也可以从文件中读取对象。

    Person类

    import java.io.Serializable;
    
    public class Person implements Serializable {   //需要实现接口Serializable
        private String name;
        private /*transient关键字:阻止成员变量序列化*/ int age;
        //类,自定义了序列号,编译器不会计算序列号(就算保存到文件后修改了java代码,也没关系)
        private static final long serialVersionUID = 1478652478456L;
    
        //tostring,init,get,set方法...
    }

    1、将对象写入文件中

    /*
     * ObjectOutputStream
     * 构造方法: ObjectOutputStream(OutputSteam out)
     * 传递任意的字节输出流
     * void writeObject(Object obj)写出对象的方法
     */
    private static void func() throws IOException {
        FileOutputStream fos = new FileOutputStream("/home/x54256/桌面/2.txt");
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        Person p = new Person("x5456",23);
        oos.writeObject(p);
        oos.close();
    }
    

    2、从文件中读取对象

    /*
     * ObjectInputStream
     * 构造方法:ObjectInputStream(InputStream in)
     * 传递任意的字节输入流,输入流封装文件,必须是序列化的文件
     * Object readObject()  读取对象
     */
    private static void func() throws IOException, ClassNotFoundException {
        FileInputStream fis = new FileInputStream("/home/x54256/桌面/2.txt");
        //创建反序列化流,构造方法中,传递字节输入流
        ObjectInputStream ois = new ObjectInputStream(fis);
        //调用反序列化流的方法 readObject()读取对象
        Object obj = ois.readObject();
        System.out.println(obj);
        ois.close();
    }
    

    三、打印流

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

    打印流根据流的分类:

    • 字节打印流 PrintStream:构造方法,接收File类型,接收字符串文件名,接收字节输出流OutputStream

    • 字符打印流 PrintWriter:构造方法,接收File类型,接收字符串文件名,接收字节输出流OutputStream, 接收字符输出流Writer

    方法:

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

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

    特点:

    • 1. 此流不负责数据源,只负责数据目的
    • 2. 为其他输出流,添加功能
    • 3. 永远不会抛出IOException,但可能抛出别的异常

    1、写入文件

    /*
     * 打印流,向File对象的数据目的写入数据
     * 方法print println  原样输出
     * write方法走码表
     */
    public static void function() throws FileNotFoundException{
    	//文件
    	File file = new File("c:\1.txt");
    	PrintWriter pw = new PrintWriter(file);
    	//字符串		
    	PrintWriter pw = new PrintWriter("c:\2.txt");		
    	pw.println(100);	//100
    	pw.write(100);		//d
    	//字节输出流
    	FileOutputStream fos = new FileOutputStream("c:\3.txt");
    	PrintWriter pw = new PrintWriter(fos);
    	//字符输出流
    	FileWriter fw = new FileWriter("c:\4.txt");
    	PrintWriter pw = new PrintWriter(fw);
    
    	pw.close();
    }

    2、自动刷新

    /*
     * 打印流实现文本复制
     *   读取数据源  BufferedReader+File 读取文本行
     *   写入数据目的 PrintWriter+println 自动刷新
     */
    public static void main(String[] args) throws IOException{
    	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文件工具类

    1、获取文件扩展名

    /*
     * FilenameUtils类的方法
     * static String getExtension(String filename)
     * 获取文件名的扩展名
     */
     public static void function(){
    	 String name = FilenameUtils.getExtension("c:\windows");
    	 System.out.println(name);
     }
    

    2、获取文件名

    /*
     * FilenameUtils类的方法
     * static String getName(String filename)
     * 获取文件名
     */
    public static void function_1(){
    	String name = FilenameUtils.getName("c:\windows\");
    	System.out.println(name);
    }
    

    3、判断文件后缀

    /*
     * FilenameUtils类的方法
     * static boolean isExtension(String filename,String extension)
     * 判断文件名的后缀是不是extension
     */
    public static void function_2(){
    	boolean b = FilenameUtils.isExtension("Demo.java", "java");
    	System.out.println(b);
    }
    

    4、读取文本

    /*
     * 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);
     }
    

    5、写入文本

    /*
     * FileUtils工具类的方法
     * static void writeStringToFile(File src,String date)
     * 将字符串直接写到文件中
     */
    public static void function_1() throws IOException{
    	FileUtils.writeStringToFile(new File("c:\b.txt"),"我爱Java编程");
    }
    

    6、复制文件

    /*
     * 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"));
    }
    

    7、复制文件夹

    /*
     * FileUtils工具类方法
     * static void copyDirectoryToDirectory(File src,File desc)
     * 复制文件夹
     */
    public static void function_3() throws IOException{
    	FileUtils.copyDirectoryToDirectory(new File("d:\demo"), new File("c:\"));
    }
    
  • 相关阅读:
    POJ-1035 Spell checker---字符串处理
    hdu-3572 Task Schedule---最大流判断满流+dinic算法
    BZOJ4826: [Hnoi2017]影魔
    BZOJ4825: [Hnoi2017]单旋
    BZOJ3504: [Cqoi2014]危桥
    BZOJ4407: 于神之怒加强版
    BZOJ2818: Gcd
    BZOJ4542: [Hnoi2016]大数
    BZOJ4540: [Hnoi2016]序列
    BZOJ4537: [Hnoi2016]最小公倍数
  • 原文地址:https://www.cnblogs.com/x54256/p/8442639.html
Copyright © 2020-2023  润新知