简体   繁体   中英

Properties File Java

I want to use a pre-configured properties File , load it, and after that, add a line under the already present line from the default config.properties .

I have a read() function that will read/load my default Properties file and I have a write() function that will add String key = "hey"; String value = "ho"; String key = "hey"; String value = "ho";

But when I launch read() and write() and when i look in the new config.properties I only see

hey=ho

In my default config.properties i got

 ha=hi 

 hu=hu

But I want in my new config :

ha=hi  

hu=hu

hey=ho

My code:

Properties prop = new Properties();
public static PropertiesIParse instance;

public PropertiesIParse() {
    instance = this;
}

public PropertiesIParse getInstance() {
    return instance;
}

public Properties getProp() {
    return prop;
}

public void read() {

    InputStream input = null;

    try {
        String filename = "/config.properties";
        input = PropertiesIParse.class.getResourceAsStream(filename);
        if (input == null) {
            System.out.println("Sorry, unable to find " + filename);
            return;
        }

        getProp().load(input);
        Enumeration<?> e = getProp().propertyNames();
        while (e.hasMoreElements()) {
            String key = (String) e.nextElement();
            String value = getProp().getProperty(key);
            System.out.println("KeyKey : " + key + ", Value : " + value);
        }
    } catch (IOException ex) {
        ex.printStackTrace();
    } finally {
        if (input != null) {
            try {
                input.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

public void write() {

    String filename = "config.properties";
    FileOutputStream out;
    //prop = new Properties();

    String key = "hey";
    String value = "ho";

    try {

        out = new FileOutputStream(filename, true);
        getProp().setProperty(key, value);
        getProp().store(out, "--type--"); // <---- variable pour dire YYYY MM DD etc.
        out.close();

    } catch (IOException i) {
        System.out.println("Probleme avec l'écriture dans le fichier Property." + i.getMessage());
        i.printStackTrace();
    }
}

So, in my Main method:

new PropertiesIParse().getInstance().read();
new PropertiesIParse().getInstance().write();

EDIT

i change what you say but i got the same thing ... a new config.properties with only my prop.store(key,value) in it

Properties prop = new Properties();
static PropertiesIParse instance;

private PropertiesIParse() {
    instance = this;
}

public static PropertiesIParse getInstance() {
      if (instance== null) {
            instance = new PropertiesIParse();
        }
        return instance;
}

public void read() {

    InputStream input = null;
    Properties prop = new Properties();

    try {
        String filename = "config.properties";
        input = PropertiesIParse.class.getResourceAsStream(filename);

        if (input == null) {
            System.out.println("Sorry, unable to find " + filename);
            return;
        }
        prop.load(input);
        Enumeration<?> e = prop.propertyNames();
        while (e.hasMoreElements()) {
            String key = (String) e.nextElement();
            String value =prop.getProperty(key);
            System.out.println("Key : " + key + ", Value : " + value);
        }
    } catch (IOException ex) {
        ex.printStackTrace();
    } finally {
        if (input != null) {
            try {
                input.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

public void write(String key, String value) {

    Properties prop = new Properties();
    String filename = "./config.properties";
    String comment="";
    FileOutputStream out;

    try {
        out = new FileOutputStream(filename, true);
        prop.setProperty(key, value);
        prop.store(out, "-"+key+"-"+comment); 
        out.close();
    } catch (IOException i) {
        System.out.println("Probleme avec l'écriture dans le fichier Property." + i.getMessage());
        i.printStackTrace();
    }
}

My Main

PropertiesIParse.getInstance().read();
PropertiesIParse.getInstance().write(new String("ok"),new String("iiiii"));

And i only got ok=iiiii in it ... i surely miss something there, thanks for your help

Your singleton is broken as you use a public constructor. Each time you call -

new PropertiesIParse()

there a new instance of Properties will be created which will be empty. Make the constructor private and change the getInstance() as follows

public PropertiesIParse getInstance() {
    if (instance== null) {
        instance = new PropertiesIParse();
    }
    return instance;
}

Then use it without using new :

PropertiesIParse.getInstance().read();
PropertiesIParse.getInstance().write();

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM