Reputation: 29
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";
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();
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
Upvotes: 1
Views: 143
Reputation: 2066
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();
Upvotes: 3