021.8 properties(开发使用频率高)

内容:Properties基本存取、存储到持久化设备、从持久化设备读取、简单模拟收费软件试用结束
##
Properties——有配置文件的功能。
    特点:
    1、Hash table的子类,map集合中的方法都可以用
    2、该集合没有泛型。键值都是字符串
    3、是一个持久化的属性集,键值可以保存到集合和持久化设备上,键值的来源也可以是持久化设备。

##########################################################
基本存取

public class PropertiesDemo
{
    public static void main(String[] args)
    {
        methodDemo();
    } 
    public static void methodDemo()
    {
        //Properties基本存取
        Properties prop = new Properties();
        prop.setProperty("xlsg", "21");
        prop.setProperty("qldk", "20");
//        prop.list(System.out);   //这个方法调试使用
        Set<String> set = prop.stringPropertyNames();
        for(String name:set){
            String value = prop.getProperty(name);
            System.out.println(name+"__"+value);
        }
    }
}

 

#######################################################################
存储到持久化设备

通过Properties的store方法指定保存到什么文件里面

public class PropertiesDemo
{
    public static void main(String[] args) throws IOException
    {
        methodDemo();
    }
    
    public static void methodDemo() throws IOException
    {
        //Properties基本存取
        Properties prop = new Properties();
        prop.setProperty("xlsg", "21");
        prop.setProperty("qldk", "20");
        
//        prop.list(System.out);   //这个方法调试使用
        
        Set<String> set = prop.stringPropertyNames();
        for(String name:set){
            String value = prop.getProperty(name);
            System.out.println(name+"__"+value);
        }
        
        //永久化存储到设备上
        FileOutputStream fos = new FileOutputStream("myfile\\we.properties");
        
        //使用properties的store方法。
        prop.store(fos, "my demo , person info");
    }

}

 

#########################################################################################
从持久化设备读取

 

public static void main(String[] args) throws IOException
{
//        methodDemo();
    methodDemo_read();
}

private static void methodDemo_read() throws IOException
{
    File configure_file = new File("myfile\\we.properties");
    //读取流中的数据
    Properties prop = new Properties();
    
    //定义读取流和数据文件关联
    FileInputStream fis = new FileInputStream(configure_file.toString());
    prop.load(fis);
    
    prop.list(System.out); //测试使用
    
    prop.setProperty("xlsg", "22");
    
    prop.list(System.out);
    
    FileOutputStream fos = new FileOutputStream(configure_file);
    
    prop.store(fos, "my demo,person info");
    
    fis.close();
    fos.close();
}

步骤:1)创建properties对象
    2)创建输入流对象
    3)properties对象和输入流对象相关联
    4)通过prop.setProperty("xlsg", "22");进行操作
    5)保存prop.store(fos, "my demo , person info");

 #########################################################################################
简单模拟收费软件试用结束

public static void main(String[] args) throws IOException
{
    String value = read_count();
    if(count(Integer.parseInt(value))){
        //操作
        value = Integer.toString(Integer.parseInt(value)+1);
        System.out.println(value);
    }
    else{
        System.out.println("试用结束,请充值!");
    }
    write_count(value);
}

private static boolean count(int num)
{
    if(num<5){
        return true;
    }
    return false;
}

private static void write_count(String value) throws IOException
{
    File configure_file = new File("myfile\\count.properties");
    FileOutputStream fos = new FileOutputStream(configure_file);
    Properties prop = new Properties();
    prop.setProperty("count", value);
    prop.store(fos, "tryout count");
    fos.close();
}

private static String read_count() throws IOException
{
    File configure_file = new File("myfile\\count.properties");
    if(!configure_file.exists()){
        configure_file.createNewFile();
    }
    FileInputStream fis = new FileInputStream(configure_file);
    
    Properties prop = new Properties();
    prop.load(fis);
    String value;
    String key = "count";
    if(prop.containsKey(key)){
    }
    else{
        prop.setProperty(key, "0");
    }
    value = prop.getProperty(key);
    return value;

}
my code
public static void main(String[] args) throws IOException {
    /*
     * 练习:定义功能记录程序运行次数,满足试用次数后,给出提示:试用次数已到,请注册。
     * 
     * 思路:
     * 1,需要计数器。这个软件使用一次计数一次。每使用一次,就进行计数累计。
     * 2,计数器是程序中的一个变量,程序启动计数器计数,可是程序结束这个计数器就消失了。
     * 下次启动会重新进行计数,原来计数的值没有保留下来。咋办?
     * 3,让这个计数器持久化。存储到文件中,为了标识数据可读性,数据起个名字。出现键值对。
     * 而且还是一个持久化的键值对,Properties集合正好符合这个要求。
     * 
     */
    if(isStop()){
        System.out.println("试用次数已到,请注册");
        return;
    }
    runcode();
}

private static boolean isStop() throws IOException {
    //1,配置文件。
    File configFile = new File("tempfile\\app.properties");
    if(!configFile.exists()){//如果配置文件不存在,就创建。
        configFile.createNewFile();
    }
    //2,创建属性集。
    Properties prop = new Properties();
    //3,定义读取流和配置文件关联。
    FileInputStream fis = new FileInputStream(configFile);
    //4,将流关联的数据读取到属性集中。
    prop.load(fis);
    //5,通过属性集的指定键count,获取具体的次数。
    String value = prop.getProperty("count");
    int count = 0;
    //6, 对value进行判断,如果存在就对其自增。
    if(value!=null){
        count = Integer.parseInt(value);
        if(count>=5){
            return true;
        }
    }
    count++;//对其值进行自增。
    //7,将自增后的值和指定的键重新存储到属性集中,键相同,值覆盖。
    prop.setProperty("count", Integer.toString(count));
    //8,将属性集存储到配置文件中。对配置文件中的信息进行更新。
    FileOutputStream fos = new FileOutputStream(configFile);
    prop.store(fos, "app run count");
    //9,关闭资源。
    fos.close();
    fis.close();
    return false;
}
//程序主体。
public static void runcode(){
    System.out.println("程序运行....play");
}
the answer

 

posted @ 2018-05-08 17:29  Alos403  阅读(282)  评论(0编辑  收藏  举报