Inifile verarbeiten (inkl. #-Zeichen) mit Java 1.5

MadMax2581

Mitglied
Hallo zusammen.

Suche ein Erweiterung für Java mit der ich Inifiles interpretieren und verarbeiten kann. Die Erweiterung soll das #-Zeichen nicht als Kommentar erkennen und (wichtig) mit Java Version 1.5.0_60 zusammenarbeiten.

Habe erst das Package org.apache.commons.configuration.INIConfiguration genutzt, hat auch super funktioniert -> bis ich dem Programm einen Pfad (für das zu ladene Inifile) mit einem #-Zeichen übergeben habe. Das erkennt es dann als Kommentar und schneidet alles danach ab.

Dann hab ich ini4j verwendet, dass erkennt das #-Zeichen nicht als Kommentar -> arbeitet aber aus irgend einem für mich nicht nachvollziehbaren Grund nicht mit Java 1.5.0. Bei Java 1.6 geht alles super, kann ich aber leider nicht nutzen (Firmenstruktur). Die haben als Standard Java 1.5.0_60 und das muss auch genutzt werden.

Kann mir vielleicht jemand sagen wie man eins der Problem umgehen kann, oder besser noch eine Erweiterung die beide Voraussetzungen erfüllt?

Max
 
Danke für deine Antwort, aber stehe gerade völlig auf dem Schlauch. Hatte mir das auch vorher schon durchgelesen, aber nichts gesehen wie ich umstellen kann das es auch bei Java 1.5 funktioniert. Oder bzw. habe keine Grund gefunden wieso es bei normalen Betrieb nur bei Java 1.6 läuft.

Vielleicht kannste mich ja kurz mal auf den richtigen Weg schubsen.

Gruss
Max
 
Hi Max,

wenn Du org.apache.commons.configuration.INIConfiguration weiter benutzen möchtest, könntest Du so etwas machen:

Java:
import org.apache.commons.configuration.*;

public class Test {
	public static void main(String[] args) {
		try {
			INIConfiguration iniConf = new myINIConfiguration("test.ini");
		} catch (ConfigurationException e) {
			e.printStackTrace();
		}
	}
}

class myINIConfiguration extends INIConfiguration {
	public myINIConfiguration(String file) throws ConfigurationException {
		super(file);
	}

	protected boolean isCommentLine(String line) {
		// Nur Zeilen, die mit ';' beginnen als Kommentar behandeln
		return line.startsWith(";") ? true : false;
	}

}

Gruß
joschi
 
Hallo joschi70,

danke für deine Antwort. Der Fehler passiert nicht wenn im Inifile ein #-Zeichen kommt -> sondern wenn im Pfad, um das Inifile zu laden, ein #-Zeichen enthalten ist.

Bsp.: ../../../../../Aufbereitung#Mapfiles/tssl.ini

Bis zu dem isCommentLine kommt er erst gar nicht. Hab das ganze eben mal debuggt:

Er geht vom Konstruktor INIConfiguration zum Konstruktor der Super-Klasse AbstractFileConfiguration -> dort dann in die Funktion load() -> dort versucht er über die Klasse import org.apache.commons.configuration.ConfigurationUtils.locate die URL zu bestimmen. Dabei bekommt er dann ne Exception (url = new URL(name); name ist dabei der Pfad -> Fehler: java.net.MalformedURLException: no protocol: ../../../../../Aufbereitung#Mapfiles/tsg2009.ini) und schneidet alles hinter der # weg.

Denke mal da stimmt was nicht. Das ist dann aber auch schon so tief im Package org.apache.commons.configuration verschachtelt, dass man es nicht mehr wirklich gut ändern kann.

Die Zeile: url = file.toURL(); liefert dann das falsche Ergebnis. Um das zu ändern müsste ich das ganze Package org.apache.commons.configuration umschreiben und das bringt es halt nicht wirklich.

Hast Du oder jemand anders noch einen Vorschlag?

Gruss
Max
 
Zuletzt bearbeitet:
Hi Max,

hab's gerade so probiert und das scheint zu funktionieren.

Java:
INIConfiguration iniConf = new INIConfiguration(new File("Aufbereitung#Mapfiles/tssl.ini").toURI().toURL());

Gruß
joschi
 
Deswegen ist file.toURL wohl auch deprecated. "This method does not automatically escape characters that are illegal in URLs".

Während file.toURI().toURL() ordentlich funktioniert. Wenn die Lösung von joschi geht, dann tragt, dass doch mal in deren Bugtracking ein.
 
Hallo joschi70 und zeja,

die Lösung hat hervorragend funktioniert. Hatte sowas ähnliches probiert, dass hatte aber nicht geklappt und da hab ich es anders probiert.

Vielen Dank nochmals für die Hilfe, wieder was gelernt.

Ich werd den Fehler mal in das Bucktracking eintragen, der hält nämlich ganz schön auf ;-).

Gruss
Max
 
Zurück