jar soll eigenen namen(pfad) finden

Status
Nicht offen für weitere Antworten.

H2SO3-

Bekanntes Mitglied
hi,

folgendes: Ich habe eine jar und diese soll ihren eigenen Namen bzw. den Pfad rausfinden.

Den Ordner indem sie drinne liegt bekomme ich ja mit
Java:
 String dirPath = System.getProperty("user.dir");

alledings weiß ich ja nun nicht wie die jar selber heißt (kann verschiedenen Namen haben)
Der sinn dahinter ist, das in der Jar eine Textdatei liegt, die ich auslesen will.

mit
Java:
ClassLoader.getSystemResource("version/version.info").toString();
habe ich es auch schon ausprobiert. Leider klappt auch das nicht wirklich.
 

mvitz

Top Contributor
Wieso liest du die Textdatei nicht mit

Java:
getClass().getClassLoader().getResourceAsStream("myfile.txt");

aus? Dadurch, dass die txt Datei mit ihm jar liegt, ist sie auch im CLasspath und kann somit so geladen werden, ohne zu wissen wo das jar File liegt.

Edit: Und btw. "user.dir" gibt dir nur den Ordner an, von dem aus der User das Jar File ausführt.

Hierzu mein Test:
Java:
public class Test {
	public static void main(String[] args) {
		System.out.println(System.getProperty("user.dir"));
	}
}

hab ich kompiliert und ein Jar draus gemacht. -->
/home/test.jar

Aufruf von java -cp /home/test.jar Test führte zu:

Aufruf aus Directory "/" -->
Code:
/
Aufruf aus Directory "/home" -->
Code:
/home
 
Zuletzt bearbeitet:

H2SO3-

Bekanntes Mitglied
Es kann halt sein, das mehrere Datein ausgelesen werden müssen, weshalb sie alle im selben ordner liegen müssen.

Währe also schon wichtig, das ich in einen Ordner innerhalb der jar reinkomme.
 

Ebenius

Top Contributor
Den Ordner indem sie drinne liegt bekomme ich ja mit
Java:
 String dirPath = System.getProperty("user.dir");
Nein. Damit bekommst Du das CWD. Das muss nichts mit dem Ort des JAR zu tun haben:
Code:
cd /foo/bar
java -jar /home/ebenius/myjar.jar
<== Das CWD ist hier "/foo/bar" und nicht "/home/ebenius".

Es kann halt sein, das mehrere Datein ausgelesen werden müssen, weshalb sie alle im selben ordner liegen müssen.
Du hast den Vorredner falsch verstanden. Er wollte darauf hinweisen, dass Du nicht die oben erwähnte statische Methode des ClassLoaders benutzen sollst. Du willst wahrscheinlich sowas da machen:
Java:
final URL url = getClass().getResource("/version/mytext.txt");
Damit geht's. :)

Ebenius
 

H2SO3-

Bekanntes Mitglied
OK, hört sich ja ganz gut an.

von welchen "Object" ist

getClass()... ??

in der Zeile
Java:
URL url = getClass().getResource("/version/mytext.txt");

Dies kann er bei mir nicht kompilieren.
Ist das von
Java:
this.
//oder
System.
?
 

H2SO3-

Bekanntes Mitglied
Habe es gerade mal mit
Java:
URL url = ClassLoader.class.getClass().getResource("test.txt");
probiert und die test.txt in alle möglichen Ordner gepackt.
Leider ist das ergebniss immer null.
 

Ebenius

Top Contributor
Schreib mal eine ganze Klasse mit package und import und einem Methodenrumpf der die Datei laden soll. Ich fülle Dir dann den Inhalt aus.

Ebenius
 

H2SO3-

Bekanntes Mitglied
OK, dank dir,

habe ein kleines Beispielprojekt angelegt und eine jar gebaut.

In der jar liegt auch ein ordner version und indem eine version.info datei.
Der Code liegt natürlich auch dabei. Zum leichteren lesen füge ich ihn hier nochmal mit ein.

Java:
package com.example;

import java.awt.Font;
import java.awt.Frame;
import java.awt.TextArea;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;
import java.util.UUID;

public class main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
    	
		Frame frame = new Frame();
		Font font = new Font("", Font.ITALIC, 12);
		TextArea textArea = new TextArea();
		textArea.setEditable(false);

		String text = getVersionText();
 		
		int frameX = 300;
    	int frameY = 100;
    	frame.setSize(frameX, frameY);
    	frame.setLocation(frameX, frameY);  	
        frame.setIconImage(new BufferedImage(1,1,BufferedImage.TYPE_INT_ARGB));	
        frame.setTitle("Version Number");
        frame.setFont(font);
    	textArea.setText(text);
    	frame.add(textArea);

    	
    	frame.setAlwaysOnTop(true);
    	frame.setVisible(true);
    	frame.setAlwaysOnTop(false);
    	frame.addWindowListener
    	(
                new WindowAdapter() 
                {
                    public void windowClosing(WindowEvent e) 
                    {
                        System.exit(0);
                    }
                }
        );
	}
	
    private static String getVersionText()
    {
    	String uuid = UUID.randomUUID().toString();
    	String version = "";
    	String dirPath = System.getProperty("user.dir");
        String versionFile = dirPath + "\\version\\version.info";
        
        String input;
return "nur ein beispiel";
//        try {
//            BufferedReader in = new BufferedReader(
//            		new InputStreamReader(new FileInputStream(versionFile)));
//            while( null != (input = in.readLine()) ) 
//            {
//            	version = version.concat(uuid + input + uuid);
//            }
//            version = version.replace(uuid + uuid, "\r\n").replace(uuid, "");
//			
//        } catch (FileNotFoundException e) {
//        	version = e.getMessage();
//		} 
//        catch (IOException e)
//		{
//			version = e.getMessage();
//		}
//
//        return version;
    }

}

Schätze ja mal, das es nur eine kleinigkeit ist. Hoffe es ist nicht viel mühe für dich :)
 

theuserbl

Bekanntes Mitglied
Also ich finde die anfängliche Frage durchaus berechtigt.

Wieso liest du die Textdatei nicht mit

Java:
getClass().getClassLoader().getResourceAsStream("myfile.txt");

Die Variante hat nur dann Vorteile, wenn man eine Datei dieser Jar lesen will. Will man aber auch noch dort reinschreiben, dann geht es nicht mehr.

Ist schon praktisch, wenn man nur eine Jar hat und alle nötigen Dateien drin gespeichert sind. Auch solche Dateien, wo geänderte Einstellungen des Programms drinstehen.
 

H2SO3-

Bekanntes Mitglied
ok,
getClass() ist klar,
das problem ist, ich möchte den ganzen code in die main class reinpacken, damit ich alles nur in einer classe habe. Da die jedoch static ist, funktioniert hier getClass()... leider nicht.
 

Schandro

Top Contributor
Dann schreib
NameDeinerKlasse.class
statt
getClass()


(Übrigens sollte man den ersten Buchstaben eines Klassennames großschreiben)
 

H2SO3-

Bekanntes Mitglied
HUHUHUHU
habs endlich,

VIELEN DANK an alle die hier ideen mit eingebracht haben. Nun noch für alle die auf diesen tread stoßen die zusammengefasste Lösung :)

Der code der eine info datei im Ordner version im jar ausließt ist folgender
Java:
    private static String getVersionText03()
    {
        InputStream in = ClassLoader.getSystemResourceAsStream("version/version.info");
        String version;
        if (in == null) 
        {
        	return "InputStream is null";
        }
        else
        {
	        try 
	        {
                  BufferedReader reader = new BufferedReader(new InputStreamReader(in));
                  version = reader.readLine();
                  reader.close();
                  in.close();
	        }
            catch (IOException ex) 
            {
            	return ex.getMessage();
            }
        }
        return version;
    }

anschließend das Projekt als runable jar bauen.

Mal testweiße draufklicken, jetzt sollte InputStream is null erscheinen.

die jar entpacken. anschließend in dem ordner einen ordner version anlegen, in diesem eine version.info anlegen (ist eine textdatei)

Mit Beyond Compare nun die jar mit dem Ordner vergleichen. Nun in beyond compare den Ordner in die jar packen. Anschließend sollte alles klappen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Welchen Packager soll ich verwenden. Allgemeine Java-Themen 7
O 2D-Grafik BioFarben-Programm soll auf Vollbild schalten Allgemeine Java-Themen 1
Noahscript Konto anlegen um JDK herunterzuladen? Was soll das? Allgemeine Java-Themen 1
E Angabe wie groß Array sein soll und in for-schleifen diesen Array füllen Allgemeine Java-Themen 3
J Message Box soll bei bestimmter Zeit angezeigt werden Allgemeine Java-Themen 19
M 4 Gewinnt KI macht nicht, was sie soll.. Allgemeine Java-Themen 1
J Überschriebene Funktion soll nicht die super Funktion aufrufen Allgemeine Java-Themen 4
S Methoden Liste soll Methode aus innerer Klasse aufrufen Allgemeine Java-Themen 4
perlenfischer1984 Lombok Builder soll andere Klasse bauen Allgemeine Java-Themen 4
C Eclipse einstellen, dass eine bestimmte JDK benutzt werden soll Allgemeine Java-Themen 3
RalleYTN Problem bei Schleife die durch einen 2D raum iterieren soll Allgemeine Java-Themen 1
R serielles Terminal mit Java: Cursor soll blinken Allgemeine Java-Themen 4
L Wie genau soll ein Klassendiagramm sein Allgemeine Java-Themen 4
I JPanel soll sich dem JFrame anpassen Allgemeine Java-Themen 1
S Bachelorarbeit , soll ich ? soll ich nicht? Allgemeine Java-Themen 23
L Klassen Konstruktor soll Objekt anderer Klasse erzeugen Allgemeine Java-Themen 2
H JFileChooser soll NUR Windows-Netzwerkumgebung anzeigen Allgemeine Java-Themen 2
I JTextArea soll nur drei Zeilen anzeigen Allgemeine Java-Themen 1
K Methode soll neue Buttons erstellen Allgemeine Java-Themen 5
J if else Anweisung macht nicht was es soll. Wieso? Allgemeine Java-Themen 10
J java-applikation-1.jar soll java-applikation-2 aufrufen.jar Allgemeine Java-Themen 5
C Reflektions, Benutzer soll Konstruktor auswählen und Parameter übergeben können Allgemeine Java-Themen 5
H Scanner soll einen Inputredirect einlesen, liest aber nicht jedes Wort ein. Allgemeine Java-Themen 3
S Threads ServerSocket-Thread soll schlafen, bis er gebraucht wird Allgemeine Java-Themen 2
T Welches Tuturial soll ich paralell lesen ? Allgemeine Java-Themen 3
G Jar-File soll eignen *.jar Namen ausgeben Allgemeine Java-Themen 10
D Dialog soll sich beim Klick auf Button schließen Allgemeine Java-Themen 8
L JAR verändern - JAVAC soll einfach nur kompilieren, ohne Prüfungen Allgemeine Java-Themen 16
C Abstrakte Klasse soll Methode aus Unterklasse aufrufen Allgemeine Java-Themen 3
D Input/Output Datei ausgewählt - Datei soll nicht existieren Allgemeine Java-Themen 5
S exec( "cmd /c") aber Konsole soll offen bleiben Allgemeine Java-Themen 9
L Entscheiden, welcher Code ausgeführt werden soll Allgemeine Java-Themen 7
I Swing Welche Swing Komponente soll ich nehmen? Allgemeine Java-Themen 2
R Programm soll warten bis eine Passwort eingabe gemacht wurde. Allgemeine Java-Themen 6
R FileChooser soll nur das File ausgeben Allgemeine Java-Themen 4
B Java soll Datei von Javascript empfangen Allgemeine Java-Themen 4
E Bitcode liegt vor und soll gespiegelt werden Allgemeine Java-Themen 4
B Scheduler soll bestimmten Job stoppen Allgemeine Java-Themen 4
J Main-Thread soll auf alleKinder Threads warten Allgemeine Java-Themen 5
B Thread soll anderen Thread beenden Allgemeine Java-Themen 5
R ANT Jar Task soll leere Verzeichnisse ignorieren..? Allgemeine Java-Themen 3
Developer_X JButton soll gar nichts machen Allgemeine Java-Themen 8
M Ein Array-Wert soll sich verändern, aber 2 tun es? Allgemeine Java-Themen 7
J Zweiter Prozess der alle x Sekunden etwas abfragen soll Allgemeine Java-Themen 2
G Was ist Ant und warum soll ich das brachen, wenn es IDEs gib Allgemeine Java-Themen 10
X Software soll einen Text vorlesen! Allgemeine Java-Themen 5
P Copiler soll nicht vorhandene Methoden ignorieren Allgemeine Java-Themen 2
G Apache soll mit SVN zusammenarbeiten Allgemeine Java-Themen 3
J double 3.0 soll ohne Nachkommastelle ausgegeben werden Allgemeine Java-Themen 12
B Programm soll auf die Eingabe vom Mouselistener warten. Allgemeine Java-Themen 19
S String soll Anführungszeichen enthalten. Allgemeine Java-Themen 2
M Methode soll warten, bis Button gedrückt Allgemeine Java-Themen 2
Y Methode soll 2 Werte zurückliefern Allgemeine Java-Themen 7
ARadauer programm soll sich selbst ändern können Allgemeine Java-Themen 20
F Klasse soll sich selbst returnieren mit entsprechendem Typ. Allgemeine Java-Themen 15
U Programm soll sich nach update neustarten Allgemeine Java-Themen 30
A NullPointerException, Thread soll Thread steuern Allgemeine Java-Themen 2
MQue HintergrundFarbe des Buttons beim drücken soll bleiben Allgemeine Java-Themen 2
A equals() macht nicht, was es soll Allgemeine Java-Themen 4
E Java-Programm soll Java-Programm "fernsteuern" -wi Allgemeine Java-Themen 3
G Jar File soll anderes benutzen Allgemeine Java-Themen 3
Nils_Langner InputStream soll sich bei neuen Daten melden Allgemeine Java-Themen 2
Q Methode soll auf schließen eines Frames warten Allgemeine Java-Themen 4
S Log4J mit 2 Appender, einer soll nur INFO loggen Allgemeine Java-Themen 3
H Nur bis zur letzten Textzeile soll gelesen werden Allgemeine Java-Themen 4
G Was soll noch alles in Java kommen? Allgemeine Java-Themen 14
K Methode soll ein Array zurückgeben Allgemeine Java-Themen 4
M Ein Thread soll ein Textfeld (SWT) ändern Allgemeine Java-Themen 4
P Javaprogramm soll doppeltgeklickte Datei verarbeiten Allgemeine Java-Themen 22
B Thread soll auf Event warten, dann Daten an Klasse senden Allgemeine Java-Themen 2
R Thread soll auf MouseClick warten Allgemeine Java-Themen 2
I Verschlüsselung mit Pwd. - User soll Algorithmus wählen Allgemeine Java-Themen 4
S Java Programm soll im Hintergrund laufen (vgl. fork() bei C) Allgemeine Java-Themen 10
G To many Code? Was soll der scheiß? Allgemeine Java-Themen 11
T Soll ich meine Software als freeware zum download geben? Allgemeine Java-Themen 15
thE_29 Werden die SUN JVMs immer blöder oder was soll das. Allgemeine Java-Themen 11
T Klasse soll Object sein->um in JTabbedPane einzufügen Allgemeine Java-Themen 2
A Textfeld soll verschiedene Datumseingaben akzeptieren Allgemeine Java-Themen 5
1 Applet soll PDF von Servlet empfangen Allgemeine Java-Themen 3
S Welchen Editor soll man für Graphische lösungen benutzen Allgemeine Java-Themen 2
H Wie stellt ein JTree fest, wo etwas eingehängt werden soll? Allgemeine Java-Themen 2
M Was soll ich benutzen? Java2D, Java3D, Swing, AWT?? Allgemeine Java-Themen 21
R EOFException was soll der ... Allgemeine Java-Themen 6
T Addons im eigenen Programm Allgemeine Java-Themen 1
E Eigenen "Aufzählungstyp" erstellen - mit enum ? Allgemeine Java-Themen 18
S Parametrisierte jUnit 5-Tests mit eigenen Datentypen/Klassen-Objekten als Test-Parameter Allgemeine Java-Themen 0
dereki2000 Eigenen Zeichensatz benutzen Allgemeine Java-Themen 7
B JAVA Prozesse in einer eigenen Anwendung laufen lassen Allgemeine Java-Themen 9
J Java eigenen Button programmieren (ob Cursor im Rechteck ist oder nicht..../button pressed or not) Allgemeine Java-Themen 6
K Problem: Java-Klasse mit mehreren Threads als eigenen Prozess starten Allgemeine Java-Themen 3
C Bufferoverflow beim eigenen simpeln Programm Allgemeine Java-Themen 4
F Grundrechenarten mit eigenen Typen Allgemeine Java-Themen 9
D Eigenen Objekt Pool Allgemeine Java-Themen 15
A Eigenen OutputStream schreiben und verwenden Allgemeine Java-Themen 9
D eigenen eventListener Allgemeine Java-Themen 5
X Duplikate aus eigenen Datentypen entfernen Allgemeine Java-Themen 14
R Eigenen Comparator schreiben ? Allgemeine Java-Themen 10
G Kennt jemand gute Produkte zum Lizensieren der eigenen Apps? Allgemeine Java-Themen 6
G Fragen zum eigenen Scheduler Allgemeine Java-Themen 4
thE_29 Java Prozesse der eigenen JVM Allgemeine Java-Themen 12

Ähnliche Java Themen


Oben