Java 中与IO流有关的集合(Properties集合)

属性集

java.util.Properties继承于Hashtable,来表示一个持久的属性集。它使用键值结构存储数据,每个键及其对应值都是一个字符串。该类也被许多Java类使用,比如获取系统属性时, System.getProperties方法就是返回一个Properties对象。

Properties类

Properties集合是Hashtable集合的子类,Hashtable类是Map接口的其中一个实现类。Properties集合 是唯一一个和IO流相结合的集合。Properties类表示了一个持久的属性集。 Properties可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串。

java.util.Properties extends Hashtable<k, v>
java.util.Hashtable implements Map<k, v>

构造方法

public Properties() { this(null); }
// 创建一个空属性列表

public Properties(Properties defaults) { this.defaults = defaults; }
// 创建一个预设属性列表

基本的存储方法

public synchronized Object setProperty(String key, String value) { return put(key, value); }
// 保存一对属性
public String getProperty(String key) { ... }
// 使用此属性列表中指定的键搜索属性值
public Set<String> stringPropertyNames() { ... }
// 所有键的名称的集合

这几个方法的使用:举例

import java.util.Iterator;
import java.util.Properties;
import java.util.Set;

public class Demo01Properties {
    public static void main(String[] args) {
        method();
    }

    public static void method() {
        // 创建Properties集合对象,Properties集合可key和value都是String类型
        Properties p = new Properties();

        // 使用setProperty()方法,往集合中添加数据。该方法相当于Map集合中的put方法
        p.setProperty("程序猿", "22");
        p.setProperty("攻城狮", "25");
        p.setProperty("骇客", "19");

        // 使用stringPropertyNames()方法,把Properties集合中所有的键存储到一个Set<String>集合中。
        Set<String> s = p.stringPropertyNames();

        // 遍历Set集合,取出Properties集合中的每一个值。
        Iterator<String> ite = s.iterator();
        while ((ite.hasNext())) {
            String key = ite.next();
            String value = p.getProperty(key);
            System.out.println(key + "=" + value);
        }
    }
}

Properties集合中的store方法和load

store方法

public void store(Writer writer, String comments)
// 把集合中的临时数据,持久化的存储到硬盘中。

public void store(OutputStream out, String comments)
// 把集合中的临时数据,持久化的存储到硬盘中。

参数:
Writer writer:字符输出流,可以写中文。
OutputStream out:字节输出流,不可以写中文。
String comments:注释,用来解释说明保存的文件是做什么用的。不可以使用中文,否则会出现乱码,默认是Unicode编码。一班使用"空字符串"。

举例:把集合中的数据,持久化的存储到硬盘中。

使用步骤:

  1. 创建Properties集合对象,添加数据。
  2. 创建字节输岀流/字符输岀流对象,构造方法中绑定要输岀的目的地。
  3. 使用Properties集合中的方法 store,把集合中的临时数据,持久化写入到硬盘中存。
  4. 释放资源。
import java.io.FileWriter;
import java.io.IOException;
import java.util.Properties;

public class DemoPropertiesStore {
    public static void main(String[] args) throws IOException {
        method();
    }

    public static void method() throws IOException {
        // 创建Properties集合对象,添加数据。
        Properties p = new Properties();
        p.setProperty("程序猿", "22");
        p.setProperty("攻城狮", "25");
        p.setProperty("骇客", "19");

        // 创建字符输岀流对象,构造方法中绑定要输岀的目的地。
        FileWriter fw = new FileWriter("/Users/liyihua/IdeaProjects/Study/src/view/study/demo32/p.txt");

        // 使用Properties集合中的方法store,把集合中的临时数据,持久化写入到硬盘中存。
        p.store(fw, "save data");

        // 释放资源。
        fw.close();
    }
}

运行结果,生成一个p.txt文件,文件内容如下:

load方法

public synchronized void load(Reader reader) throws IOException { ... }
// 把硬盘中保存到的文件(键值对),读取到集合中使用。

public synchronized void load(InputStream inStream) throws IOException { ... }
// 把硬盘中保存到的文件(键值对),读取到集合中使用。

参数:
Reader reader:字符输入流,能读取含有中文的键值对。
InputStream inStream:字节输入流,不能读取含有中文的键值对。

举例:把硬盘中保存到的文件(键值对),读取到集合中使用。读取上例中的p.txt文件。

使用步骤:

  1. 创建Properties集合对象。
  2. 使用Properties集合对象中的方法load,读取保存键值对的文件。
  3. 遍历Properties集合,输出。
import java.io.FileReader;
import java.io.IOException;
import java.util.Iterator;
import java.util.Properties;
import java.util.Set;

public class DemoPropertiesLoad {
    public static void main(String[] args) throws IOException {
        method();
    }

    public static void method() throws IOException {
        // 创建Properties集合对象。
        Properties p = new Properties();

        // 使用Properties集合对象中的方法load,读取保存键值对的文件。
        FileReader reader = new FileReader("/Users/liyihua/IdeaProjects/Study/src/view/study/demo32/p.txt");
        p.load(reader);

        // 遍历Properties集合,输出。
        Set<String> s = p.stringPropertyNames();
        Iterator<String> ite = s.iterator();
        while (ite.hasNext()) {
            String key = ite.next();
            String value = p.getProperty(key);
            System.out.println(key + "=" + value);
        }
    }
}

控制台输出:

程序猿=22
攻城狮=25
骇客=19

原文地址:https://www.cnblogs.com/liyihua/p/12267542.html

时间: 2024-08-04 03:04:31

Java 中与IO流有关的集合(Properties集合)的相关文章

Java中的IO流(五)

上一篇<Java中的IO流(四)>记录了一下Properties类,此类不属于IO流,它属于集合框架.接下来说一下IO流中的其它流 一,打印流PrintStream PrintStream为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式.并且此注永远不会抛出IOException. 此流的构造函数大致分三类 1,接收File文件类型的 2,接收OutputStream类型的 3,接收文件名形式的 下演示一下此流的两个方法 1 private static void functio

Java中的IO流

Java中的IO流是实现输入/输出的基础. 按照流的方向不同:分为输入流和输出流. 按照处理数据单位的不同:分为字节流(8位)和字符流(16位). 按照功能不同:分为节点流和处理流 所有面向字节的流类都继承于InputStream类(输入流) 或OutputStream类(输出流),这两个类是抽象类,我们可以利用它的子类来完成不同的功能. InputStream.OutputStream都是抽象类 InputStream抽象了应用程序读取数据的方式 OutputStream抽象类应用程序写出数据

JAVA 中的IO流

Java中的IO流是用来处理设备与设备之前的数据传输,在java中以流的形式传输.流分为两类:字节流和字符流. 字节流:InputStream,OutPutSteam.(计算机内的数据都是以字节存储的,字节流可以操作任意数据) 字符流:Reader,Writer.(字符流只能操作字符,但是在实际应用中字符流比较方便) 从操作来看又可以分为:输入流和输出流. 在进行IO流操作的时候分为以下几步:1.导入IO流的包,2.进行IO流的异常处理,3.关闭IO流释放资源. 字节流 ————————————

Java中的IO流总结

Java中的IO流总结 1. 流的继承关系,以及字节流和字符流. 2. 节点流FileOutputStream和FileInputStream和处理流BufferedInputStream和BufferedOutputStream.以及对应的FileOutputWriter,FileInputReader,BufferedInputReader,BufferedOutputWriter. 3. 转换流InputStreamReader和OutputStreamWriter 一:流的继承关系 字节

Java中的IO流体系

Java为我们提供了多种多样的IO流,我们可以根据不同的功能及性能要求挑选合适的IO流,如图10-7所示,为Java中IO流类的体系. 注:这里只列出常用的类,详情可以参考JDK API文档.粗体标注为常用! 图10-7 Java中的IO流体系 从上图发现,很多流都是成对出现的,比如:FileInputStream/FileOutputStream,显然是对文件做输入和输出操作的.我们下面简单做个总结: 1. InputStream/OutputStream 字节流的抽象类. 2. Reader

整理 JAVA中的IO流 (字符流和字节流两个大类)

java中的io流分为两类,字符和字节: OutputStream和InputStream字节流的父类,抽象.OutputStream有两个提供了实现的接口closable和flushable. Writer和Reader字符流的父类,抽象.实际上在流的操作中,底层与文件进行读写的都是字节流,因为即使是字符流的对象,其最终实现读写的也是用的字节流. 操作文件的字节子类FileOutputStream和FileInputStream.记住,这里面写出和读入的都是字节. class useByteS

Java中的IO流之输入流|乐字节

亲爱的乐字节的小伙伴们,小乐又来分享Java技术文章了.上一篇写到了IO流,这篇文章着重 谈谈输入流,再下次再说输出流. 点击回顾上一篇:乐字节Java之file.IO流基础知识和操作步骤 一. 输入流 字节流和字符流的操作方式几乎完全一样,只是操作的数据单元不同而已 .字节流可 以操作所有文件,字符流仅操作纯文本. 1.抽象类:InputStream 和 Reader InputStream和Reader是所有输入流的基类,它们是两个抽象类,是所有输入流的模版,其中定义的方法在所有输入流中都可

三、JAVA中的IO流,输出流

JAVA中java.io.*;提供数据的流式输入与输出的相关类,IO流是对于输入与输出的抽象,JAVA把这些不同来源和目标的数据都统一抽象为数据流.将输入与输出的数据统一为流的好处是程序不必关心要读取得是文件,还是网络中的数据,而是统一当作IO流来处理. IO流又分为字符流与字节流,主要区别 字节流 按字节处理(一次处理一个字节) 使用类OutputStream 字符流 按字符处理(一次处理一个字符即两个字节) 使用类Writer 其实字节流与字符流处理十分相似(即每次处理的单位不同),好多书上

Java中的IO流系统详解

Java 流在处理上分为字符流和字节流.字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符.字符数组或字符串,而字节流处理单元为 1 个字节,操作字节和字节数组. Java 内用 Unicode 编码存储字符,字符流处理类负责将外部的其他编码的字符流和 java 内 Unicode 字符流之间的转换.而类 InputStreamReader 和 OutputStreamWriter 处理字符流和字节流的转换.字符流(一次可以处理一个缓冲区)一次操作比字节流(一次一个字节)效率高