www.Gerhard-Raabe.de
  Java Package
 
 
Back   IniFile
 
Copyright: Das nachfolgenden Packages ist frei verfügbar, solange es nicht kommerziell verwendet wird! Falls es so wie veröffentlicht, in Teilen oder abgewandelt zum Einsatz kommt, würde ich mich sehr über eine kurze E-Mail freuen.
 
Package-Name: IniFile
 
Enthaltende Klassen: IniFile.CIniFile
IniFile.CIniFileSection
IniFile.CIniFileKey
 
Anwendung: Dieses Package erlaubt den komfortablen lesenden und schreibenden Zugriff auf INI-Files. In INI-Files können z.B. Konfigurations- oder Parameterdaten abgelegt werden. Dabei ist jeder Parameter einer Sektion zugeordnet. Parameternamen müssen innerhalb einer Sektion eindeutig sein. Jedoch kann der gleiche Parametername in verschiedenen Sektionen verwendet werden.

INI-Files sind eine gute Alternative z.B. zur Windows-Registry, da sie unabhänging vom verwendeten Betriebssystem sind.
 
Beschreibung: Ein typisches INI-File (Konfigurationsfile) ist folgendermaßen aufgebaut:

  [Sectionname 1]  
  Key 11 = Wert 11  
  Key 12 = Wert 12  
  Key 13 = Wert 13  
  . . .  
  . . .  
  . . .  
  [Sectionname 2]  
  Key 21 = Wert 21  
  Key 22 = Wert 22  
  Key 23 = Wert 23  
  . . .  
  . . .  
  . . .  

Dem Aufbau des INI-Files folgt der Aufbau der Klassen:

CIniFile representiert das INI-File und ist von der Klasse ArrayList abgeleitet. Es hält eine beliebige Anzahl von Sektionen, die durch die Klasse CIniFileSection dargestellt werden. CIniFileSection ist ebenfalls von der Klasse ArrayList abgeleitet und hält eine beliebige Anzahl von Werten, die durch die Klasse CIniFileKey representiert werden. Die Werte werden dabei durch ihren innerhalb einer Sektion eindeutigen "Key" identifiziert.

Solange ein Key also innerhalb einer Sektion eindeutig ist kann natürlich ein gleichlautender Key auch in einer oder mehren anderen Sektionen vorkommen. Selbstredend ist auch, daß die Sektionensnamen eindeutig sein müssen.
 
Methoden: Der Zugriff auf das INI-File erfolgt mit den folgenden Methoden der Klasse CIniFile:

  public void load(String FileName)  
  public void save(String FileName)  

Die Methode load ließt ein INI-File vom Filesystem. Mit dem Parameter Filename wird der Filenamen inklusive Path angegeben. Ist das spezifizierte File nicht vorhanden und wird das aufrufende Programm aus einem Archivefile gelesen (JAR-File), dann versucht die Methode das INI-File innerhalb des Archivefiles zu finden. Ist das File auch dort nicht vorhanden, werden keine Daten gelesen und die Liste bleibt leer. Für diesen Fall ist in der weiter unten beschriebenen Methode getValue der Default-Wert zu setzen.

Die Daten werden mit der Methode save auf das Filesystem geschrieben. Dabei ist zu beachten, daß immer alle und nur die in CIniFile definierten Werte auf das Filesystem geschrieben werden. Befinden sich also Werte in dem File, die sich nicht in CIniFile befinden, dann sind diese anschließend verloren! Es empfiehlt sich daher immer erst mit load alle Daten zu lesen, dann mit den Methoden setValue die notwendigen Änderungen vorzunehmen und anschließend den geänderten Datenbestand mit save auf das Filesystem zu sichern.

Auf die einzelnen Datenelemente wird mit den Methoden getValue der Klasse CIniFile zugegriffen:

  public String getValue(String SectionName, String KeyName, String DefaultValue)  
  public int getValue(String SectionName, String KeyName, int DefaultValue)  
  public boolean getValue(String SectionName, String KeyName, boolean DefaultValue, String ValueTrue, String ValueFalse)  

Ist die zu der Kombination SectionName/KeyName kein Wert vorhanden, dann wird der in DefaultValue übergebene Wert zurückgegeben. Für boolean-Werte ist noch der "True-String" und der "False-String" mit anzugeben (z.B. true = YES; false = NO).

Mit den setValue-Methoden der Klasse CIniFile können die Werte verändert oder neue hinzugefügt werden:

  public void setValue(String SectionName, String KeyName, String Value)  
  public void setValue(String SectionName, String KeyName, int Value)  
  public void setValue(String SectionName, String KeyName, boolean Value, String ValueTrue, String ValueFalse)  

Die setValue-Methoden verändern den zu der Kombination SectionName/KeyName angegebenen Wert. Ist die Kombination nicht vorhanden dann wird automatisch ein neuer Eintrag generiert! Dabei werden bei Bedarf auch neue Sektionen erstellt.

Auch hier ist für boolean-Werte noch der "True-String" und der "False-String" zu definieren (z.B. true = YES; false = NO).

Da Float-Werte in unterschiedlichen Anwendungen recht unterschiedlich formatiert werden, sollten sie als String übergeben und gelesen werden.

Die Klasse CIniFile stellt darüber hinaus auch noch die Methode getChanged zur Verfügung. Sie giebt true zurück, wenn seit der Objekterstellung oder dem Ausführen der Methode load Daten verändert wurden. Dieser Status kann auch mit der Methode resetChanged zurück gesetzt werden.

  public boolean getChanged()  
  public void resetChanged()  

 
Beispiel:
        .
      .
      .
CIniFile l_IniFile = new CIniFile();
try
{
      l_IniFile.load("FileName.ini");
}
catch (IOException i)
{
      JOptionPane.showMessageDialog(this, i.getMessage(), "IO-Error",
            JOptionPane.ERROR_MESSAGE);
            .
            .
            .
}
      .
      .
      .
// Beispiel lesen von Werten
String l_StringValue = getValue("SectionName1", "KeyName1", "DefaultWert");
int l_IntValue = getValue("SectionName1", "KeyName2", 42);
boolean l_BooleanValue = getValue("SectionName2", "KeyName3", true, "Yes", "No");
      .
      .
      .
// Beispiel schreiben von Werten
setValue("SectionName1", "KeyName1", "geänderter Wert");
setValue("SectionName1", "KeyName2", 43);
setValue("SectionName2", "KeyName3", false, "Yes", "No");
setValue("SectionName2", "KeyName1", "hinzugefügter Wert"); // Neu hinzugefügter Wert
      .
      .
      .
// Save INI-File
if (l_IniFile.getChanged())
{
      if (JOptionPane.showConfirmDialog(
            this,
            "Do you want to save the settings?",
            "Save Settings",
            JOptionPane.YES_NO_OPTION,
            JOptionPane.QUESTION_MESSAGE) == JOptionPane.YES_OPTION)
      {
      try
      {
            l_IniFile.save("FileName.ini");
      }
      catch (IOException i)
      {
            JOptionPane.showMessageDialog(this, i.getMessage(), "IO-Error",
                  JOptionPane.ERROR_MESSAGE);
                  .
                  .
                  .
      }
}
      .
      .
      .
 

Ini-File vorher:   Ini-File nachher:
  [SectionName1]  
  KeyName1 = DefaultWert  
  KeyName2 = 42  
  [SectionName2]  
  KeyName3 = Yes  
  [SectionName1]  
  KeyName1 = geänderter Wert  
  KeyName2 = 43  
  [SectionName2]  
  KeyName3 = No  
  KeyName1 = hinzugefügter Wert  
 
Download:
Next   *.class
Next
  *.java
382315 Besucher - seit dem 01.02.2005 - 2 Besucher online © 2004-2015 by Gerhard Raabe ##, ## ### #### - ##:##:##