Hallo zusammen,
habe im Studium damals einen Einblick in Java bekommen und will das nun vertiefen. Dazu arbeite ich mich gerade durch "Der Weg zum Java-Profi" von Michael Inden. Mir sagt das Buch echt zu und da ich auch mit einem Freund von mir gerade ein aktuelles Projekt angehe, passt das als Lektüre perfekt.
Darin gibt es direkt zu Beginn auch einen Abschnitt über ungültige Objektzustände bei Initialisierung. Soweit verstehe ich das, aber tue mich gerade trotzdem etwas schwer, das in einem (simplen) Fall umzusetzen.
Für unser Programm gibt es eine config.json, die im User-Home liegt. Zu Beginn des Programms soll also diese config.json ausgelesen werden, doch was tun, wenn es sie noch gar nicht gibt?
Dafür habe ich mir mal folgende Klasse überlegt:
Probleme habe ich nun damit, wie ich nun den Konstruktor bastle. Ich könnte natürlich bereis alle nötigen Einträge, die in die config.json müssen direkt beim Konstruktor mitangeben, aber dann muss man die ja immer angeben, auch wenn es die Datei schon gibt.
Lasse ich es dagegen beim Konstruktor ohne Parameter, so habe ich ja ein nicht einsatzfähiges Objekt.
Wie geht man denn da in dem Fall am besten vor?
habe im Studium damals einen Einblick in Java bekommen und will das nun vertiefen. Dazu arbeite ich mich gerade durch "Der Weg zum Java-Profi" von Michael Inden. Mir sagt das Buch echt zu und da ich auch mit einem Freund von mir gerade ein aktuelles Projekt angehe, passt das als Lektüre perfekt.
Darin gibt es direkt zu Beginn auch einen Abschnitt über ungültige Objektzustände bei Initialisierung. Soweit verstehe ich das, aber tue mich gerade trotzdem etwas schwer, das in einem (simplen) Fall umzusetzen.
Für unser Programm gibt es eine config.json, die im User-Home liegt. Zu Beginn des Programms soll also diese config.json ausgelesen werden, doch was tun, wenn es sie noch gar nicht gibt?
Dafür habe ich mir mal folgende Klasse überlegt:
Java:
public class Config {
private static final Logger LOGGER = LoggerFactory.getLogger(Config.class.getName());
private File configFile;
private JSONObject configEntries;
Config() {
this.configFile = new File(System.getProperty("user.home") + "/.msc/config.json");
this.readConfigFile();
}
private void createConfigFile() throws IOException {
this.configFile.getParentFile().mkdirs();
this.configFile.createNewFile();
}
public JSONObject readConfigFile() {
if (this.configFile.exists()) {
JSONParser parser = new JSONParser();
try {
Object obj = parser.parse(new FileReader(configFile));
this.configEntries = (JSONObject) obj;
return this.configEntries;
} catch (FileNotFoundException e) {
LOGGER.info("No config.json found in {}, so creating it", configFile);
return null;
} catch (IOException e) {
LOGGER.error("Error read config-JSON-File", e);
return null;
} catch (ParseException e) {
LOGGER.error("Error parse config-JSON-File", e);
return null;
}
}
else {
return null;
}
}
public void writeConfigFile(String username, ...) throws IOException {
if (!this.configFile.exists()) { this.createConfigFile();}
// hier wird dann die JSON geschrieben
}
public JSONObject getConfigEntries() {
return configEntries;
}
}
Probleme habe ich nun damit, wie ich nun den Konstruktor bastle. Ich könnte natürlich bereis alle nötigen Einträge, die in die config.json müssen direkt beim Konstruktor mitangeben, aber dann muss man die ja immer angeben, auch wenn es die Datei schon gibt.
Lasse ich es dagegen beim Konstruktor ohne Parameter, so habe ich ja ein nicht einsatzfähiges Objekt.
Wie geht man denn da in dem Fall am besten vor?