/** * properties是hashtable的子类 哈希表hashtable 也就是说它具备map集合的特点, * 而且它里面存储的键值对 都是字符串。 * * 是结合中IO技术相结合的集合容器 * * 该对象的特点:可以用于键值对形式的配置文件 * * 有固定格式 * 键=值 * * 例如: 背景 = 红色 * * 文字 = 蓝色 等 * * @author Administrator * */ import java.util.*; public class PropertiesDemo { public static void main(String[] args) { setAndGet(); } // 设置 获取 元素 public static void setAndGet() { // 创建properties对象 Properties prop = new Properties(); // 对键和值进行设置 prop.setProperty("zhangsan", "20"); prop.setProperty("lisi", "30"); // System.out.println(prop); // 对键进行获取 返回此属性列表中的键集, // 其中该键及其对应值是字符串,如果在主属性列表中未找到同名的键, // 则还包括默认属性列表中不同的键。 Set<String> name = prop.stringPropertyNames();// 现在所有的名字在集合name中 for (String s : name) { // 循环输出由键 找到的值 System.out.println(s + "::" + prop.getProperty(s)); } } }
*************************************************************************************************************************************************************************************
*************************************************************************************************************************************************************************************
第二个例子:
/** * 演示,: 如何将流中的数据存储到集合中: * 需求:将info.txt中的键值对,存入到properties集合中 * * 思路: * 1,用一个流和info.txt关联; * 2,读取一行数据,将改行数据用"="进行切割 * 3,等号左边作为键,右边作为值,存入到properties集合中 * @author Administrator * */ import java.io.*; import java.util.*; public class PropertiesDemo2 { public static void main(String[] args) throws IOException// 为了代码的可看性 这里就抛出异常 { // method_1(); loadDemo(); } public static void loadDemo() throws IOException { // 创建properties对象 Properties prop = new Properties(); // 使用流 关联文件 这里使用字节流 FileInputStream fis = new FileInputStream("info.txt"); // 使用load方法 ,将流中数据加载进入集合 prop.load(fis); // 现在要改变集合的同时也要改变文件中的内容 prop.setProperty("zhaoliu", "99");// 这里只改变了内存中的数据没有改变文件 // 创建写入文件流 FileOutputStream fos = new FileOutputStream("info.txt"); // store方法 将此 Properties 表中的属性列表(键和元素对)写入输出流。 //实际上就是将集合中内容写入文件 prop.store(fos, "zhushi"); // 打印集合中元素 键值对都打印 // System.out.println(prop); // 另一种打印方法 list 数是打印流 列出集合目录 prop.list(System.out); // 关闭流文件 fis.close(); fos.close(); } // 下面的代码 是load方法的原理 public static void method_1() throws IOException// 为了代码的可看性 这里就抛出异常 { // 使用读取缓冲流 用一个流和info.txt进行关联 字符流 BufferedReader bufr = new BufferedReader(new FileReader("info.txt")); // 读取一行中的数据 中转 String line = null; // 这里定义properties对象 键值对形式 Properties prop = new Properties(); // 循环读取一行 前面IO的知识 while ((line = bufr.readLine()) != null) { // 读取一行后打印 // System.out.println(line); // 对一行进行切割 (根据等号) 并把切割后的数据传给数组 String[] arr = line.split("="); // 设置properties中的数据 prop.setProperty(arr[0], arr[1]); } // 关闭流 bufr.close(); // 打印prop集合中数据 System.out.println(prop); } }
*****************************************************************************************************************************************************************************************
第三个例子:
/** * 需求:用于记录应用程序运行次数 * 如果使用次数已到。那么给出注册提示。 * * 分析: * 容易想到的是计数器, 可是计数器定义在程序中,随着程序的运行而在内存 * 中存在,并进行自增,可是随着程序的退出,该计数器也在内存中消失了。 * * 下一次再启动该程序,有重新开始从0技术。 * 这不是想要的。 * * 需要程序即使结束,该计数器的值也存在。 * 下次程序启动会先加载该计数器的值并加1后再重新存储起来。 * * 所以要建立一个配置文件,用于记录该软件的使用次数 * * 该配置文件使用键值对的形式,这样 * 便于月度数据,并且操作数据 * * 键值对数据时map集合。 * 数据时以文件形式存储,那么就使用IO技术 * map + IO 就要使用Properties * * 配置文件可以实现应用程序数据的共享 * @author Administrator * */ import java.io.*; import java.util.*; public class PropertiesDemo4 { public static void main(String[] args) throws IOException { // 创建properties对象 Properties prop = new Properties(); // 封装文件对象 //文件为count.ini File file = new File("count.ini"); // 判断文件是否存在 if (!file.exists()) { // 如果不存在那么建立这个文件 file.createNewFile(); } // 创建读取流对象 FileInputStream fis = new FileInputStream(file); // 加载配置文件count.ini 这里封装成了对象 file prop.load(fis); // 定义计数器 int count = 0; // 获取使用的次数 String value = prop.getProperty("time"); // 判断能否拿到使用次数的值 if (value != null) { // 将获取的使用次数的值赋值给count // 因为properties集合中都是字符串所以要强制转换 count = Integer.parseInt(value); // 如果超过使用次数,给出提示,并返回 if (count >= 4) { System.out.println("已经达到使用次数限制,请注册"); return; } } // 运行一次后 计数器自增+- count++; // 设置内存中容器的 键值对 count现在是整形 要转换成字符串 prop.setProperty("time", count + ""); // 创建写入流对象 用于写入文件 操作的文件对象时file // 实际上是"count.ini FileOutputStream fos = new FileOutputStream(file); // 将集合中内容写入文件 prop.store(fos, " "); } }