A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 尹善波 中级黑马   /  2012-7-19 23:32  /  1454 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

//Properties 运用

import java.io.*;
import java.util.*;

class PropertiesDemo1
{

   public static void sop(Object obj)
   {
      System.out.println(obj);
   }
        public static void main(String[] args) throws IOException
        {
                 loadDemo();
        }
        public static void loadDemo()  throws IOException
        {
          Properties prop =new Properties();
          //FileInputStream fis=new FileInputStream("D:\\test2.java");//创建的这个对象有什么用
                                                         //只是读取,可能是空文件啊?
          //prop.load(fis);  说是将输入流中的数据加载到集合中,在下面也没见应用,这两个问题该怎么理解?
          prop.setProperty("wangwu","49");
          FileOutputStream fos=new FileOutputStream("d:\\info.txt");
          prop.store(fos,"haha");
           sop(prop);   
           prop.list(System.out);
           fos.close();
           //fis.close();
        }
        }
//注释的部分不用对程序有什么影响?

3 个回复

倒序浏览
本帖最后由 陈欢 于 2012-7-19 23:43 编辑

load ( InputStream inStream) ,从输入流中读取属性列表(键和元素对)。通过对指定的文件(比如说上面的 test2.java 文件)进行装载来获取该文件中的所有键 - 值。其实就是读取文件的一行数据,因为数据的规则都是以Key=value的形式存在的。所以读取一行数据后,可以通过“=”对该行数据进行split,完成后左边为key,右边为value,存储到Properties。
回复 使用道具 举报
import java.io.*;
import java.util.*;

class PropertiesDemo1
{

   public static void sop(Object obj)
   {
      System.out.println(obj);
   }
        public static void main(String[] args) throws IOException
        {
                 loadDemo();
        }
        public static void loadDemo()  throws IOException
        {
          Properties prop =new Properties();
          //FileInputStream fis=new FileInputStream("D:\\test2.java");//读取该文件的内容,为空则prop中没有内容(要读进来必须是key=value的形式)
          //prop.load(fis);  //这句话的意思是先把文件中的键值对读进来,如果你再添加或修改,就会在他的基础上进行,
          prop.setProperty("wangwu","49");
          FileOutputStream fos=new FileOutputStream("d:\\info.txt");
          prop.store(fos,"haha");
           sop(prop);   
           prop.list(System.out);
           fos.close();
           //fis.close();
        }
        }
//如果你注释掉的话,不影响使用,效果和D:\\test2.java中的内容为空一样
建议你把D:\\test2.java 中的内容写成键值对形式,在比较,就一目了然了(例如:张三=22)



回复 使用道具 举报
Properties的源代码见附件(Properties.png)
Properties的作用是读取项目配置文件
//FileInputStream fis=new FileInputStream("D:\\test2.java");//创建的这个对象有什么用
                                                       //只是读取,可能是空文件啊?
外部的文件就是存放的是配置类型的文件,相当于
key1=value1
key2=value2
//prop.load(fis);  说是将输入流中的数据加载到集合中,在下面也没见应用,这两个问题该怎么理解?
通过load方法可以从外部载入配置文件信息,然后可以做修改,修改完毕后在通过load方法将配置信息重新写回到文件中,供下一次系统启动时使用
举个例子:
你用户第一次设置好声音的大小为50,等他关掉程序,下一次在启动的时候你不从文件中load,你就不知道用户上一次设置的声音大小是多少
package com.yy.test;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;
public class Test {
public static void main(String[] args) {
  Properties prop = new Properties();
  try {
   // 打开配置文件
   FileInputStream fis = new FileInputStream("D:\\test.txt");
   // 载入配置文件
   prop.load(fis);
   // 关闭文件
   fis.close();
   // 读取保存在文件中的声音大小
   String voice = (String) prop.get("voice");
   // 显示声音大小
   System.out.println("当前声音大小为:" + voice);
  
// 修改声音大小
   prop.setProperty("voice", "100");
   // 打开配置文件
   FileOutputStream fos = new FileOutputStream("D:\\test.txt");
   // 保存修改到文件
   prop.store(fos, "Change the voice");
   // 关闭文件
   fos.close();
  } catch (FileNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
}

}
运行结果见附件

Properties.png (7.36 KB, 下载次数: 22)

Properties

Properties

初始值.png (16.45 KB, 下载次数: 31)

初始值

初始值

运行后.png (14.62 KB, 下载次数: 25)

运行后

运行后

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马