i/o 流 Properties集合 打印流 序列化流与反序列化流

  1. Properties集合
  2. 序列化流与反序列化流
  3. 打印流
  4. commons-IO

1.1Properties类介绍
Properties 类表示了一个持久的属性集。Properties 可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串。
特点:
1、Hashtable的子类,map集合中的方法都可以用。
a)JAVA中HashMap和Hashtable区别
i..Hashtable的方法是同步的,HashMap未经同步,所以在多线程场合要手动同步HashMap这个区别就像Vector和ArrayList一样
//http://blog.csdn.net/tianfeng701/article/details/7588091
ii.Hashtable不允许 null 值(key 和 value 都不可以),HashMap允许 null 值(key和value都可以)
iii.两者的遍历方式大同小异,Hashtable仅仅比HashMap多一个elements方法
iv.HashTable使用Enumeration,HashMap使用Iterator
2、该集合没有泛型。键值都是字符串。
3、它是一个可以持久化的属性集。键值可以存储到集合中,也可以存储到持久化的设备(硬盘、U盘、光盘)上。键值的来源也可以是持久化的设备。
4、有和流技术相结合的方法。
load(InputStream) 把指定流所对应的文件中的数据,读取出来,保存到Propertie集合中
load(Reader)
store(OutputStream,commonts)把集合中的数据,保存到指定的流所对应的文件中,参数commonts代表对描述信息
stroe(Writer,comments);
* public Object setProperty(String key, String value)调用 Hashtable 的方法 put。
* public Set stringPropertyNames()返回此属性列表中的键集,
* public String getProperty(String key)用指定的键在此属性列表中搜索属性

*       Properties prop = new Properties();
        //添加元素到集合
        //prop.put(key, value);
        prop.setProperty("11", "vv");
        prop.setProperty("22", "23424");
        prop.setProperty("33", "343434");

        //System.out.println(prop);//测试的使用
        //遍历集合
        Set<String> keys = prop.stringPropertyNames();
        for (String key : keys) {
            //通过键 找值
            //prop.get(key)
            String value = prop.getProperty(key);
            System.out.println(key+"==" +value);
        }

2 - 把集合中的数据存储到流所对应的文件中

        //,创建流
        FileWriter out = new FileWriter("prop.properties");
        //,把集合中的数据存储到流所对应的文件中
        prop.store(out, "save data");//save过时,注释信息不打印
        //5,关闭流
        out.close();

1.3读取文件中的数据,并保存到集合
load(InputStream) 把指定流所对应的文件中的数据,读取出来,保存到Propertie集合中

        Properties prop = new Properties();
        //2,创建流对象
        FileInputStream in = new FileInputStream("prop.properties");
//FileReader in = new FileReader("prop.properties");
        //3,把流所对应文件中的数据 读取到集合中
        prop.load(in);
        //4,关闭流
        in.close();
        //5,显示集合中的数据
        System.out.println(prop);
    注意:使用字符流FileReader就可以完成文件中的中文读取操作了
    2.1对象序列化流ObjectOutputStream
 ObjectOutputStream 将 Java 对象的基本数据类型和图形写入 OutputStream。可以使用 ObjectInputStream 读取(重构)对象。通过在流中使用文件可以实现对象的持久存储。

注意:只能将支持 java.io.Serializable 接口的对象写入流中
2.2对象反序列化流ObjectInputStream
ObjectInputStream 对以前使用 ObjectOutputStream 写入的基本数据和对象进行反序列化。支持 java.io.Serializable接口的对象才能从流读取。
当一个对象要能被序列化,这个对象所属的类必须实现Serializable接口。否则会发生异常NotSerializableException异常。
2.4瞬态关键字transient
当一个类的对象需要被序列化时,某些属性不需要被序列化,这时不需要序列化的属性可以使用关键字transient修饰。只要被transient修饰了,序列化时这个属性就不会琲序列化了。
同时静态修饰也不会被序列化,因为序列化是把对象数据进行持久化存储,而静态的属于类加载时的数据,不会被序列化。`

public class Person implements Serializable {
    /*
     * 给类显示声明一个序列版本号。
     */
    private static final long serialVersionUID = 1L;
    private static String name;
    private transient/*瞬态*/ int age;

    public Person() {
        super();

    }

    public Person(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }

3.1打印流的概述
打印流添加输出数据的功能,使它们能够方便地打印各种数据值表示形式.
打印流根据流的分类:
字节打印流 PrintStream
字符打印流 PrintWriter

        //PrintWriter out = new PrintWriter(new FileWriter("printFile.txt"));
        PrintWriter out = new PrintWriter("printFile.txt");
        //new PrintWriter(new FileWriter("printFile.txt"), true);开启文件自动刷新写入功能 (可以理解为:是自动追加开启。)
        //2,写数据
        for (int i=0; i<5; i++) {
            out.println("helloWorld");
        }
        //3,关闭流
        out.close();

加入classpath的第三方jar包内的class文件才能在项目中使用
右键点击commons-io.jar,Build Path→Add to Build Path
4.2FilenameUtils “文件名”工具类
常用方法:
getExtension(String path):获取文件的扩展名;
getName():获取文件名;
isExtension(String fileName,String xx):判断fileName是否是xx后缀名;
4.3FileUtils
提供文件操作(移动文件,读取文件,检查文件是否存在等等)的方法。
常用方法:
readFileToString(File file):读取文件内容,并返回一个String;
writeStringToFile(File file,String content):将内容content写入到file中;
copyDirectoryToDirectory(File srcDir,File destDir);文件夹复制
//通过Commons-IO完成了文件夹复制的功能

FileUtils.copyDirectoryToDirectory(new File("D:\\from"), new File("C:\\to"));
`FileUtils.copyFile(new File("D:\\from.avi"), new File("D:\\copy.avi"));
 实现文件内容的自动追加
构造方法
FileOutputStream(File file, boolean append)
FileOutputStream(String fileName, boolean append)
FileWriter(File, boolean append)
FileWriter(String fileName, boolean append)
 实现文件内容的自动刷新
 构造方法
 PrintStream(OutputStream out, boolean autoFlush)
 PrintWriter(OutputStream out, boolean autoFlush)
 PrintWriter(Writer out, boolean autoFlush)

 Commons-IO
 方法
 readFileToString(File file):读取文件内容,并返回一个String;
 writeStringToFile(File fileString content):将内容content写入到file中;
 copyDirectoryToDirectory(File srcDir,File destDir);文件夹复制
 copyFileToDirectory (File srcFile,File destFile);文件复制
发布了28 篇原创文章 · 获赞 5 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/java_utf8/article/details/70991639