Presenting you easy generic SAVE/LOAD implementation, feel free to use :
(some of the Load and Save class implementations are copypasted from help section)
Save Class:
import java.io.*;
import java.util.Base64;
public class Save {
private PrintWriter pw;
String localDir = System.getProperty("user.home") + File.separator + "OSBot" + File.separator + "data" + File.separator;
public Save(String localName) {
try {
pw = new PrintWriter(localDir + localName + ".ini");
System.out.println(pw.toString() + "\n" + localDir);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
public boolean writeString(String s) {
pw.println(s);
pw.close();
return true;
}
public boolean writeObject(Serializable o) throws IOException {
writeString(toString(o));
System.out.println(toString(o));
return true;
}
private static String toString(Serializable o) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(o);
oos.close();
return Base64.getEncoder().encodeToString(baos.toByteArray());
}
}
Load class:
import java.io.*;
import java.nio.charset.Charset;
import java.util.Base64;
public class Load {
private BufferedReader br;
private InputStream fis;
private InputStreamReader isr;
private boolean finished = false;
String localDir = System.getProperty("user.home") + File.separator + "OSBot" + File.separator + "data" + File.separator;
public Load(String localName) {
try {
fis = new FileInputStream(localDir + localName + ".ini");
isr = new InputStreamReader(fis, Charset.forName("UTF-8"));
br = new BufferedReader(isr);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
public String readLine() throws IOException {
String line = null;
if (!finished) {
line = br.readLine();
if (line == null) finished = true;
}
else {
if (br != null) {
br.close();
fis.close();
isr.close();
br = null;
}
}
return line;
}
public Object readObject() throws IOException, ClassNotFoundException {
return fromString(readLine());
}
private static Object fromString( String s ) throws IOException ,
ClassNotFoundException {
byte [] data = Base64.getDecoder().decode( s );
ObjectInputStream ois = new ObjectInputStream(
new ByteArrayInputStream( data ) );
Object o = ois.readObject();
ois.close();
return o;
}
}
How it works?
FOR SAVING
All you have to do is create a Save class that you are going to use:
Save save = new Save("Filename");
And saving class that contains information about your bot:
//make sure that your Properties class implements "Serializable"
Properties propertiesofBot = new Properties("My properties class");
save.writeObject(propertiesofBot);
FOR LOADING:
//Make sure you create Load class with same name as the Save class
Load load = new Load("Filename");
And all you need to do is load and save the class to the variable
Properties properties = (Properties) load.readObject();
Saving or loading classes that differ is not supported.
Hope this helps!