Zugriff auf Datein in meinem jar File

Status
Nicht offen für weitere Antworten.

Clip

Bekanntes Mitglied
Hallo,

ich habe ein Jar file.
IN dem Jar gibt es einen Ordner namens "config".
In diesem liegt die Datei "logging.cfg"

Ich benutze den Java Logger.
Diesem Will ich dieses File zuweisen.
Code:
...
public static final String LOGGIN_PROPS_DEFAULT_NAME = "config/logging.cfg";
...
final FileInputStream configfile = new FileInputStream(LOGGIN_PROPS_DEFAULT_NAME);
logmanager.readConfiguration(configfile);
...

Wenn ich das jetzt ausführe bekomme ich den Fehler:
config\logging.cfg (Das System kann den angegebenen Pfad nicht finden)

Erstelle ich dieses Verzeichnis und die Datei in meinem Arbeitsverzeichnis geht natürlich alles wunderbar.
ABER, ich will das Verzeichnis nicht in meinem Arbeitsverzeichnis, sondern in meinem Jar haben.
Nur, wie kann ich Java breibringen, dass die Position "config/logging.cfg" sich auf mein Jar bezieht, und nicht auf mein Arbeitsverzeichnis.
:?:

Danke
 

Clip

Bekanntes Mitglied
Meine Klasse:
Code:
import java.io.FileInputStream;
import java.io.IOException;
import java.util.logging.LogManager;
import java.util.logging.Logger;

public class SwlLogger {

    public static final String LOGGIN_PROPS_DEFAULT_NAME = "config/logging.cfg";
    public static final String LOGGER_NAME = "swl.lib.util.SwlLogger";
    

    private static Logger logger = null;

    public SwlLogger(){
        super();
    }

    public static Logger getLogger(){
        // Theres only supposed to be one!
        if (logger == null){
            init();
        }
        return logger;
    }

    private static void init(){
        final LogManager logmanager = LogManager.getLogManager();
        try{
            final FileInputStream configfile = new FileInputStream(logger.getClass().getResource(LOGGIN_PROPS_DEFAULT_NAME).getFile());
            logmanager.readConfiguration(configfile);
        }
        catch(IOException ioe){
            System.err.println(ioe.getMessage());
        }
        catch (SecurityException se){
            System.err.println(se.getMessage());
        }
        logger = Logger.getLogger(LOGGER_NAME);
    }
}

Erzeugt wird folgende Fehlermeldung:
java.lang.NullPointerException
Exception in thread "main" java.lang.NullPointerException
at swl.lib.util.SwlLogger.init(SwlLogger.java:33)
at swl.lib.util.SwlLogger.getLogger(SwlLogger.java:23)
at swl.lib.db.SwlSQLConnection.close(SwlSQLConnection.java:134)

:(
 

thE_29

Top Contributor
Dann fang mal mit / an ^^

Also der String mit /bla/bla/bla.whatever

Die NPE hast du ja auch nur, weil du auf was zugreifen willst, was net gefunden wird!

Das ist das Problem..

dein String zeigt auf was, was es nicht gibt..
 

Clip

Bekanntes Mitglied
Hm, also ichhabe sowohl man ein / vorangestellt, als auch einfach mal den Pfad absolut angegeben (ausserhalb des Jars liegende Konfigurationsdatei):
Code:
public static final String LOGGIN_PROPS_DEFAULT_NAME = "C:/Dokumente und Einstellungen/jko/workspace/jiSQL/config/logging.cfg";

Aber immer der gleiche Fehler :(
 

thE_29

Top Contributor
Also auf nen lokalen Pfad und dann mit getResource geht sicher nicht...

Bist du sicher das es im Jar file ist?
 

thE_29

Top Contributor
Sicher?

Kannst du es wo uploaden zum angucken?

Machs mal mit Winzip auf und guck nach (jar ist ja nur ein Zip file)
 

Clip

Bekanntes Mitglied
Da habe ich ja getan.
Ich habe leider keine Möglichkeit datein hochzuladen :(

Ich habe ja bereits die Logger Klasse oben veröffentlicht.
Mit dieser Testklasse ist das Problem nachvollziehbar wenn ein entsprechendes Projekt angelegt wird.
Code:
import java.util.logging.Level;

import swl.lib.util.SwlLogger;

public class test {

	static void main(String[] args) {
		SwlLogger.getLogger().log(Level.INFO, "Hallo Welt");
	}
}
Der Fehler ist der oben beschriebene :(
Und die Datei ist ganz ganz ganz bestimmt da!!!!!
[JARFILE]
+config
+ logging.cfg
+lib
+ jconn3.jar
+META-INF
+ MANIFEST,MF
+ ...

:(
 

thE_29

Top Contributor
Mach mal die von foobar beschrieben Auflistung des jar files und zeigs nochmal..

Mit den + sieht man net ob wo was drunter liegt ;)
 

Clip

Bekanntes Mitglied
META-INF/MANIFEST.MF
swl/app/jisql/WarningGetter.class
swl/app/jisql/JiSQL.class
swl/app/jisql/SybaseINIScanner.class
swl/app/jisql/PwDlg$1.class
swl/app/jisql/PwDlg$2.class
swl/app/jisql/PwDlg$3.class
swl/app/jisql/PwDlg.class
swl/lib/db/SwlSQLConnection.class
swl/lib/util/SwlLogger.class
swl/lib/util/SwlUser.class
lib/jconn3.jar
config/logging.cfg
 

thE_29

Top Contributor
Also drinnen isses ;)

AAAA!!!


NImm net logger.getClass sondern this.getClass().getClassLoader().getResource..

Du greifst ja auf das swl Ding zu...
 

Clip

Bekanntes Mitglied
"this" geht leider nicht
Cannot use this in a static context

Ist es vielleicht ein designfehler meinerseits?

verwende ich
Code:
logger.getClass().getClassLoader().getResourceAsStream(LOGGIN_PROPS_DEFAULT_NAME);

kommt mal wieder die null pointer exception :(
 

thE_29

Top Contributor
Dann nimm SwlLogger.class.getClassLoader().getResource(..)

Oder was halt auch immer deine Klasse ist!
 

Clip

Bekanntes Mitglied
geht leider nicht :(
Dabei habe ich jetzt gerade mit SwlLogger.class.getClass()...
als Quellangabe /logging.cfg, config/logging.cfg, /config/logging.cfg, logging.cfg und sogar ../config/logging.cfg ausprobiert.
Immer der gleiche Fehler.
 

Clip

Bekanntes Mitglied
Normalerweise teste ich in einer IDE.
Da ich aber in der IDE noch kein Jar habe, exportiere ich in diesem Fall das Projekt immer erst und rufe es dann mit Kommandozeile auf.
 

Clip

Bekanntes Mitglied
ich habe jetzt herausgefunden, dass wenn ich die logging.cfg in das Verzeichnis der Klasse SwlLogger lege, sie dann gefunden wird.
META-INF/MANIFEST.MF
lib/jconn3.jar
swl/app/jisql/WarningGetter.class
swl/app/jisql/JiSQL.class
swl/app/jisql/SybaseINIScanner.class
swl/app/jisql/PwDlg$1.class
swl/app/jisql/PwDlg$2.class
swl/app/jisql/PwDlg$3.class
swl/app/jisql/PwDlg.class
swl/lib/db/SwlSQLConnection.class
swl/lib/util/SwlLogger.class
swl/lib/util/SwlUser.class
swl/lib/util/logging.cfg

und als Angabe natürlich:
Code:
...
public static final String LOGGIN_PROPS_DEFAULT_NAME = "logging.cfg";
...
InputStream configfile = SwlLogger.class.getClass().getResourceAsStream(LOGGIN_PROPS_DEFAULT_NAME);
logmanager.readConfiguration(configfile);

Allerdings finde ich das ein wenig umständlich. Gibt es keine Möglichkeit vom Java Archiv Root ausgehen absolut einen Pfad anzugeben?

Danke für eure Hilfe!
 

Clip

Bekanntes Mitglied
Also, ich habe jetzt eine Lösung.
Ich vermute mal, dass der Fehler irgendwo in der Richtung zu suchen ist, dass die Aufrufende Methode als static final deklariert ist. "this" funktioniert also nicht.
Ich habe jetzt eine Resource Loader Klasse geschriben die ein byte Feld zurückgibt. Damit gehts.
Code:
package swl.lib.util;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;

public class SwlLoggerConfigurationLoader {
	byte[] configfile;
	
	public SwlLoggerConfigurationLoader(String configfile) throws IOException{
		InputStream in = this.getClass().getResourceAsStream(configfile);
		this.configfile = new byte[in.available()];
		in.read(this.configfile);		
		}				
	
	public byte[] getConfigfile(){
		return this.configfile;
	}	
}

und im Logger:
Code:
...
byte[] bib = new SwlLoggerConfigurationLoader("/config/logger.cfg").getConfigfile();
ByteArrayInputStream configfile = new ByteArrayInputStream(bib);
logmanager.readConfiguration(configfile);
...
 

Clip

Bekanntes Mitglied
so, habs nochmal ein bisschen allgemeiner gemacht:
Code:
import java.io.IOException;
import java.io.InputStream;

public class ResourceLoader {
	byte[] resource;
	
	public ResourceLoader(String resource) throws IOException{
		InputStream in = this.getClass().getResourceAsStream(resource);
		this.resource = new byte[in.available()];
		in.read(this.resource);		
		in.close();
		}				
	
	public byte[] getResource(){
		return this.resource;
	}	
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
I In unterschiedlichen Applikation Zugriff auf eine gemeinsame Anwendung? Java Basics - Anfänger-Themen 8
C Zugriff auf Methode Java Basics - Anfänger-Themen 2
I Applikationsserver (WildFly) - Zugriff auf Ressourcen.. Problem mit Pfade Java Basics - Anfänger-Themen 10
J Zugriff auf eine 2. Klasse die per UI-Designer erstellt wurde Java Basics - Anfänger-Themen 1
Encera Zugriff auf Map-Objekte Java Basics - Anfänger-Themen 3
T Zugriff auf Control anderer Klasse Java Basics - Anfänger-Themen 5
W Unterschiede bei Zugriff auf Objekt und Klassenvariablen über einen Getter? Java Basics - Anfänger-Themen 2
EchtKeineAhnungManchmal hallo habe ein Problem mit einer Datei -> (Zugriff verweigert) Java Basics - Anfänger-Themen 4
R TreeSet Zugriff aus anderer Klasse Java Basics - Anfänger-Themen 8
C Kein Zugriff auf Klassenmethoden in Main Methode Java Basics - Anfänger-Themen 23
H Zugriff verweigert Java Basics - Anfänger-Themen 5
moiss002 Umgebungsvariable Kein Zugriff auf ein Array Java Basics - Anfänger-Themen 7
B Probleme mit Zugriff auf Dateisystem Windows 10 ( jFileChooser) Java Basics - Anfänger-Themen 17
B Zugriffsmodifier, Zugriff außerhalb Package Java Basics - Anfänger-Themen 5
C Zugriff auf Attribut von Oberklasse Java Basics - Anfänger-Themen 8
P Klasse hat keinen Zugriff auf getter/setter-Methoden eines Objektes Java Basics - Anfänger-Themen 9
B Methoden Methoden haben kein Zugriff auf variablen Java Basics - Anfänger-Themen 4
M Gettter/Setter Methoden Klassenfelder kapselung und zugriff? Java Basics - Anfänger-Themen 1
S Zugriff auf protected Fields = guter Programmierstil? Java Basics - Anfänger-Themen 11
M Pfadprobleme - Zugriff auf einen Ordner im Workspace Java Basics - Anfänger-Themen 17
ruutaiokwu Bluetooth-Zugriff, braucht es dazu plattformabhängige Libraries oder kann das Java mittlerweile selbst? Java Basics - Anfänger-Themen 10
R Zugriff auf den Index eines Arrays, welches ein Objekt ist. Java Basics - Anfänger-Themen 4
M Zugriff auf eine ArrayList in einer anderen Klasse Java Basics - Anfänger-Themen 4
P Zugriff auf Variablen anderer Klassen in Greenfoot Java Basics - Anfänger-Themen 1
L Methoden Zugriff <identifier> expected Java Basics - Anfänger-Themen 13
T Java - Zugriff nur mit CLASSPATH ? Java Basics - Anfänger-Themen 7
B Klassen Zugriff auf ein Objekt einer Klasse aus einer Methode heraus Java Basics - Anfänger-Themen 4
L Zugriff auf Attribute eins Objekts über ActionListener Java Basics - Anfänger-Themen 4
D Zugriff auf Methode einer anderen Klasse Java Basics - Anfänger-Themen 5
S Zugriff auf Objekt Java Basics - Anfänger-Themen 5
A Klassen Zugriff auf Instanzen Java Basics - Anfänger-Themen 2
N ArrayList in eigener Klasse erzeugen mit Zugriff Java Basics - Anfänger-Themen 7
J Zugriff auf Variable in anderem Programm Java Basics - Anfänger-Themen 5
Q Zugriff auf Attribute Java Basics - Anfänger-Themen 3
J Klassen Zugriff auf ein "String Array" Java Basics - Anfänger-Themen 6
H Datentypen ArrayList in ArrayList: Zugriff Java Basics - Anfänger-Themen 6
J get methoden zugriff und objekt erzeugung Java Basics - Anfänger-Themen 30
J Datenbank Zugriff Java Basics - Anfänger-Themen 24
T Zugriff auf JCheckBox Java Basics - Anfänger-Themen 8
E Netzlaufwerk Zugriff schlägt fehl Java Basics - Anfänger-Themen 11
C Group, Actor und Instanz-Zugriff, LibGDX Java Basics - Anfänger-Themen 4
S Zugriff auf Attribut einer unbekannten Klasse erhalten Java Basics - Anfänger-Themen 6
R Methoden Methode der GUI-Klasse Zugriff auf Methoden der Hauptklasse Java Basics - Anfänger-Themen 9
S Vererbung Zugriff auf die Basisklasse einer "zweiten" Erweiterungsklasse Java Basics - Anfänger-Themen 2
Z Threads Threads - Zugriff auf Ressourcen ohne(Lock, Synchronized) Java Basics - Anfänger-Themen 2
S Vererbung Zugriff auf Methode funktioniert nicht (static/non-static) Java Basics - Anfänger-Themen 3
F Klassen Zugriff auf verschachtelte Objekte Java Basics - Anfänger-Themen 11
J Sichtbarkeit und Zugriff Java Basics - Anfänger-Themen 9
G Wieviel kostet der Zugriff auf Objektattribute im Vergleich zur Erstellung von vars in Methode? Java Basics - Anfänger-Themen 11
L Zugriff auf zwei Java-Quellcodes Java Basics - Anfänger-Themen 3
A OOP Zugriff auf Objekte von außen Java Basics - Anfänger-Themen 8
M Kapselung Datenkapselung Sinn direkter Zugriff? Java Basics - Anfänger-Themen 1
G Methoden Zugriff auf Methode.. aus einer anderen Klasse Java Basics - Anfänger-Themen 6
J JDialog Zugriff auf parent JDialog Java Basics - Anfänger-Themen 5
K Collections Zugriff auf ein bestimmtes Element in der Collection Java Basics - Anfänger-Themen 1
K ArrayList in Konstruktor - wie späterer Zugriff Java Basics - Anfänger-Themen 2
F Zugriff auf Objekt einer anderen Klasse Java Basics - Anfänger-Themen 7
P Zugriff auf Felder in ArrayList Objekten Java Basics - Anfänger-Themen 2
J Erste Schritte Zugriff auf Eigenschaft Java Basics - Anfänger-Themen 2
M MVC - Problem mit Zugriff auf Objekt Java Basics - Anfänger-Themen 4
D Zugriff auf von einer anderen Klasse erstellten Objekten Java Basics - Anfänger-Themen 5
C 5 - Zugriff verweigert Java Basics - Anfänger-Themen 1
K Zugriff auf Variabeln Wert einer Instanz Java Basics - Anfänger-Themen 4
A Methoden Zugriff auf eingelesene Variablen in der main Methode (ohne Änderung der Parameterliste) Java Basics - Anfänger-Themen 4
Z Methoden Zugriff mit Klasse 3 auf Methode von Klasse 2 welche in Klasse 1 erzeugt wird Java Basics - Anfänger-Themen 6
Z Zugriff auf andere Methoden Java Basics - Anfänger-Themen 12
Z Zugriff auf Pakete Java Basics - Anfänger-Themen 5
G Zugriff zwischen Klassen Java Basics - Anfänger-Themen 15
N Problem mit Swing Textfeld und Zugriff aus anderer Klasse Java Basics - Anfänger-Themen 6
H Kein Zugriff auf das Element einer JList möglich: Fehlermeldung Java Basics - Anfänger-Themen 2
W OOP Zugriff auf mit Objekt erstellte Struktur Java Basics - Anfänger-Themen 7
F Klassen Zugriff auf Fenster aus versch. Klassen Java Basics - Anfänger-Themen 5
M Variablen Zugriff von außerhalb eines Blockes auf eine Variable innerhalb eines Blockes Java Basics - Anfänger-Themen 2
U Methoden Zugriff auf Array von weiterer Methode einer Klasse, Rückgabewert Problem Java Basics - Anfänger-Themen 5
B Klassen Zugriff auf Daten der Child-Klasse Java Basics - Anfänger-Themen 9
W Typisierte ArrayList und der Zugriff auf den Typ Java Basics - Anfänger-Themen 5
M Zugriff auf Klasse Java Basics - Anfänger-Themen 2
K Zugriff auf C: Java Basics - Anfänger-Themen 5
S Das richtige Format für den SOAP Zugriff Java Basics - Anfänger-Themen 0
S Klassen Zugriff auf Attribute einer zweiten Klasse, welche durch dritte gesettet wurden? Java Basics - Anfänger-Themen 2
N Zugriff bei Package Struktur Java Basics - Anfänger-Themen 6
M Enum: Zugriff auf Konstanten Java Basics - Anfänger-Themen 7
V Zugriff auf jProgressbar Java Basics - Anfänger-Themen 10
B Zugriff auf csv-Datei per hashmap Java Basics - Anfänger-Themen 5
G Spalte in JTable unsichtbar machen, Zugriff auf Daten ermöglichen Java Basics - Anfänger-Themen 2
T ZUgriff auf 'Werte' Java Basics - Anfänger-Themen 3
J Vererbung Zugriff auf private Variable Java Basics - Anfänger-Themen 10
C Klassen Zugriff auf Objekt anderer Klasse Java Basics - Anfänger-Themen 8
B Methoden Zugriff auf Variable ermöglichen Java Basics - Anfänger-Themen 3
M Zugriff auf Arraylist Java Basics - Anfänger-Themen 7
D Kein Zugriff auf JFrame Java Basics - Anfänger-Themen 2
K Zugriff einer Klasse auf eine andere Andere -> bad operand for binary operator Java Basics - Anfänger-Themen 5
B Erste Schritte Array-Zugriff Java Basics - Anfänger-Themen 10
D OOP Zugriff auf Objekte A in Klasse A aus Objekt B in Klasse B Java Basics - Anfänger-Themen 3
T Collections Zugriff auf Elemente aus Iterator() Schleife Java Basics - Anfänger-Themen 4
J Threads Zugriff auf Attribute Java Basics - Anfänger-Themen 16
N Kein Zugriff auf Ordner -> NullPointerException Java Basics - Anfänger-Themen 2
I kein zugriff auf jList oder Textfield Java Basics - Anfänger-Themen 2
N Problem bei Zugriff auf Textfelder Java Basics - Anfänger-Themen 6
LittleJavaCup Zugriff auf Klasse von package Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben