externe Properties datei aus Jar File heraus lesen

  1. #1

    externe Properties datei aus Jar File heraus lesen - Standard externe Properties datei aus Jar File heraus lesen
    Hallo,

    ich würde gern aus einem Jar File eine externe Properties Datei einlesen. Wenn die Datei im jar File liegt klappt alles. Aus Eclipse lässt sich das Programm auch starten. Wenn ich allerdings die properties ausserhalb des Jars platziere, bekomme ich eine NullPointerException.

    Ich gebe im Programm des absoluten Pfad zur Datei an: C:/Dokumente und Einstellungen/.....

    Muss ich die Datei zusätzlich noch irgenwo einbinden, damit es funktioniert ?

    Wie gestaltet sich eine Einbindung ?



    VG

  2. #2
    diggaa1984


    meinst vielleicht sowas hier (letzter beitrag)
    ResourceBundle

  3. #3
    Gast

    Ja im Prinzip schon. Jedoch funktioniert es ja bei mir im Eclipse und auch wenn die properties im Jar File liegt. ich denke, es muss auch anders funktionieren, ohne, dass ich meinen Code noch einmal anpassen muss.

    Ich muss dem Jar File doch nur sagen, welche datei eingebunden werden soll.

    oder sehe ich das falsch ?

  4. #4
    diggaa1984


    hm na absolute angaben sind eh immer kritisch ... aber die datei liegt quasi nicht im selben ordner wie die jar, sondern irgendwo anders!?

  5. #5
    Gast

    Ich habe ein Verzeichnis auf meinem Desktop mit dem namen Export. Hierin befindet sich die Jar mit allen Libraries und die config.properties. Leider wird diese dann nicht gefunden.

  6. #6
    diggaa1984


    mit dem einbinden is immer sone sache, da stolper ich auch nochmanchmal über diverse steine

  7. #7
    Gast2

    Zitat Zitat von Anonymous
    [...]Wenn ich allerdings die properties ausserhalb des Jars platziere, bekomme ich eine NullPointerException.
    wenn Du eine NPE bekommst, dann verarbeitest Du einen Fehler der beim Öffnen der properties_Datei auftritt falsch ... das muss noch nicht mal was mit dem Pfad zu tun haben

    aber ohne Quellcode kann man nur orakeln

    hand, mogel

  8. #8
    diggaa1984


    lässt aber trotzdem darauf schliessen, das er die datei in dem moment nicht finden kann .. was er ja aber unbedingt möchte

  9. #9
    Gast

    Vielen Dank für die Unterstützung...

    Ja, er findet die datei nicht. das steht zu 100% fest. meine Frage ist eigentlich ganz einfach: Was muss ich tun, um eine externe properties datei in mein Jar File einzubinden?

    Muss ich hier vielleicht den Classpath in der Mainifest datei eintragen?

  10. #10
    Gast2

    Zitat Zitat von Gast
    [...]er findet die datei nicht. das steht zu 100% fest.[...]
    nein - Du bekommst eine NullPointerException und keine FileNotFoundException ... kläre erstmal warum Du die NPE bekommst ... Du kannst jede Datei normal außerhalb einer JAR als Stream öffnen ... das ist keine Hexerei

    Code:
    BufferedReader br = new BufferedReader(new FileReader("data/" + name + ".txt"));
    hier befindet sich die Datei (relativ) in einem Unterverzeichnis von der JAR-Datei

    Code:
    BufferedReader br = new BufferedReader(new FileReader("c:/Dokumente und Einstellungen/$WHATEVER/data/" + name + ".txt"));
    und nun absolut zur jeder beliebigen Datei

    selbst wenn FileReader die Datei nicht findet kommt eine FileNotFoundException!



    kläre die NullPointerException und dann kannst Du nochmal behaupten kommen

    hand, mogel

  11. #11

    Hier einmal meine Fehlermeldung:

    Code:
    java.lang.NullPointerException
            at java.util.Properties$LineReader.readLine(Unknown Source)
            at java.util.Properties.load0(Unknown Source)
            at java.util.Properties.load(Unknown Source)
            at dao.Sysproperties.loadProps(Sysproperties.java:103)
            at dao.Sysproperties.<init>(Sysproperties.java:51)
            at dao.Sysproperties.getInstance(Sysproperties.java:65)
            at dao.StoryDAO.<init>(StoryDAO.java:39)
            at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    
            at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    
            at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Sou
    rce)
            at java.lang.reflect.Constructor.newInstance(Unknown Source)
            at java.lang.Class.newInstance0(Unknown Source)
            at java.lang.Class.newInstance(Unknown Source)
            at dao.DAOFActory.getDAO(DAOFActory.java:36)
            at controller.StoryController.<init>(StoryController.java:33)
            at export.Export.main(Export.java:29)
    Exception in thread "main" java.lang.NullPointerException
            at java.util.Properties$LineReader.readLine(Unknown Source)
            at java.util.Properties.load0(Unknown Source)
            at java.util.Properties.load(Unknown Source)
            at dao.Sysproperties.loadProps(Sysproperties.java:103)
            at dao.Sysproperties.<init>(Sysproperties.java:51)
            at dao.Sysproperties.getInstance(Sysproperties.java:65)
            at export.XMLCreator.<init>(XMLCreator.java:29)
            at export.Export.main(Export.java:30)

    mein Code:

    Code:
    public class Sysproperties {
    
    	public final static String PROPERTY_NAME = "C:/dokumente und einstellungen/All Users/Desptop/Exporter/config.properties";
    
    
    	//Statisches Object speichert eine Instanz der eigenen Klasse
    	static Object instance;
    
    	// Properties Object
    	static Properties properties; 
    
    
    
    	final String config;
    
    
    	/**
    	 * Instanziiert ein Properties-Objekt und stößt den Ladevorgang an.
    	 * @param config  Dateiname der Konfigurationsdatei
    	 */
    	public Sysproperties(String config){
    
    		properties = new Properties();
    		this.config = config;
    
    		//Properties Datei laden 
    		loadProps();
    
    	}
    
    
    	/**
    	 * Gibt GENAU eine Instanz dieser Klasse zurück.
    	 * Sysproperties ist so ein Singleton.
    	 * 
    	 * @return Instanz der Klasse
    	 */
    	public static Sysproperties getInstance(String config) {
    
    		if (instance == null) {
    			instance = new Sysproperties(config);
    		}
    		return (Sysproperties) instance;
    	}
    
    
    	/**
    	 * Hier werden alle Einstellungen aus der Konfigurationsdatei
    	 * in das Properties-Objekt geladen.
    	 */
    	@SuppressWarnings("unused")
    	private boolean loadProperties() {
    
    		boolean data = false;
    
    		try {
    			properties.load(new FileInputStream(config));
    			data = true;
    		} catch (final FileNotFoundException e) {
    			System.out.println("Config File konnte nicht gefunden weren oder existiert nicht.");
    			data = false;
    			e.printStackTrace();
    		} catch (final IOException e) {
    			System.out.println("Es ist ein Fehler beim Lesen der Config Datei aufgetreten.");
    			data = false;
    			e.printStackTrace();
    		}
    
    		return data;
    
    	}// end of load Properties
    	
    	
    	private boolean loadProps() {
    
    		boolean data = false;
    		try
            {
                properties.load(getClass().getClassLoader().getResourceAsStream("config.properties"));
                data = true;
            }
            catch (IOException e)
            {
                //logger.error("Cannot locate axis.properties file", e);
            	data = false;
            }
    
    		
    
    		return data;
    
    	}// end of load Properties
    
    
    
    	/**
    	 * Gibt einen bestimmten Konfigurationsparameter zurück.
    	 * @param aPropertyName Name des Parameters
    	 * @return Wert des Parameters
    	 */
    	public String getPropertyValue(String aPropertyName)
    	{
    
    		return properties.getProperty(aPropertyName);
    
    	}
    
    
    public void setPropertyValue(String value, String aPropertyName){
    	
    	properties.setProperty(aPropertyName,value );
    		
    	 try { 
    		 properties.store(new FileOutputStream("config.properties"), null);
    		} catch (IOException e) { 
    			System.out.println("Konnte den Wert in der config.properties nicht ändern!");
    		} 
    
    		
    	}
    
    
    }// end of class
    Ich nutze derzeit die >Funktion loadProps() zum Laden der Properties Datei...

  12. #12
    Gast

    Ja jetzt sehe ich es selbst, merde

    properties.load(getClass().getClassLoader().getResourceAsStream("config.properties"));

    ist quark...

    Da muss natürlich PROPERTY_NAME rein
    Ich hoffe, das is es ...

  13. #13
    mvitz


    Über den Klassloader hilft es sonst auch die Datei in den Classpath aufzunehmen und nur über den Namen zu referenzieren.

Ähnliche Themen
  1. Jar-File soll externe class-Datei benutzen
    Von nethwa im Forum Java Basics - Anfänger-Themen
    Antworten: 8
    Letzter Beitrag: 05.03.2012, 12:21
  2. Properties Datei aus Applikationsverzeichnis lesen
    Von Rolli im Forum Allgemeine Java-Themen
    Antworten: 5
    Letzter Beitrag: 06.04.2011, 06:48
  3. Antworten: 4
    Letzter Beitrag: 13.03.2009, 06:36
  4. properties Datei in jar-File wird nicht gefunden
    Von Gast im Forum Java Basics - Anfänger-Themen
    Antworten: 5
    Letzter Beitrag: 18.11.2004, 11:14