Dateiname von geöffneter .jar

Webmaster Pazi

Aktives Mitglied
Hey Leute!

Ist es möglich, den Dateinamen der geöffneten .jar auslesen zu lassen ?

Wenn ja, wie? Habe schon mehreres versucht jedoch kommt ständig kommt nur der Ordner in der sich die .jar befindet!
 

jgh

Top Contributor
das wäre ne möglichkeit...wenn du das aus der IDE startest, dann zeigt er natürlich nicht das aktuelle an!

Allerdings zeigt dieser Code dir alle Jar-Files an...
Java:
import java.io.File;
import java.io.IOException;

import javax.swing.JOptionPane;

public class JarNameAuslesen {

    public static void main(String[] args) {
        new JarNameAuslesen();
    }

    public JarNameAuslesen() {
        File file = new File("./");
        try {
            getJarFile(file);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public static void getJarFile(File file) throws IOException {
        String[] children;
        children = file.list();

        for (int i = 0; i < children.length; i++) {
            if (children[i].endsWith(".jar")) {
                System.out.println(children[i]);
                JOptionPane.showMessageDialog(null, children[i], "Jar-File",
                        JOptionPane.INFORMATION_MESSAGE);
            }
        }
    }
}
 

Michael...

Top Contributor
Was verstehst Du unter "der geöffneten jar". Das jar-File in dem sich die ausgeführte Klasse befindet?
Probier mal:
Java:
System.out.println(MeineKlasse.class.getResource(""));
 

Webmaster Pazi

Aktives Mitglied
Also ich habe eine Update-Funktion, und möchte sozusagen die "alte" .jar Datei löschen.
Deswegen brauche ich den namen der gerade geöffneten .jar Datei.
 

mabuhay

Bekanntes Mitglied
Hallo

Soviel ich weiss ist das nicht ganz einfach zu lösen, da du dann ja den Pfad zur gerade geöffneten jar-Datei brauchst. Ich habe auch schon nach Möglichkeiten gesucht, eine Konfigurationsdatei im gleichen Ordner wie die jar-Datei zu speichern, aber ohne Erfolg. hier der link

Das Problem ist, dass das Java-Arbeitsverzeichnis davon abhängt wie du die jar-Datei aufrufst. Wenn du in der Konsole in den Ordner navigierst und dann per java -jar Datei.jar hast du den Pfad, aber wenn du in irgend nem anderen Ordner bist und dann per java -jar /pfad/zum/jar/ordner/Datei.jar die jar-Datei aufrufst hast du den Ordner wo du dich gerade befindest als Arbeitsverzeichnis.

Aber das mit dem Updaten ist gerade eine Interessante frage, da ich mir eine Update-Klasse welche per FTP und HTTP aktualisieren kann programmiert habe. Ist die jar im Programmverzeichnis kann sie ja nur durch einen Admin verändert werden. Wie aktualisieren sich dann Programme normalerweise? Haben die alle zu aktualisierenden Dateien im Einstellungs-Verzeichnis?

mfg
 

Webmaster Pazi

Aktives Mitglied
Hallo,

Ja also die alte .jar Datei sucht die Updates und lädt sie herunter.
Inzwischen wird eine neue .jar Datei im selbem verzeichnis angelegt in der dann der Download hineingespeichert wird.

Jetzt möchte ich es den Benutzern komfortabler machen, mit einer Funktion, die alte .jar Datei zu löschen.
 

Runtime

Top Contributor
Du könntest eine jdritte ar machen, die die alte löscht, die neue umbenennt und sie dann aufruft, um die dritte jar zu löschen.
 

FArt

Top Contributor
Hallo,

Ja also die alte .jar Datei sucht die Updates und lädt sie herunter.
Inzwischen wird eine neue .jar Datei im selbem verzeichnis angelegt in der dann der Download hineingespeichert wird.

Jetzt möchte ich es den Benutzern komfortabler machen, mit einer Funktion, die alte .jar Datei zu löschen.

Mache es allen komfortable und benutze Java Web Start.
 

mabuhay

Bekanntes Mitglied
Du kannst auch einfach die alte jar-Datei direkt beim herunterladen überschreiben, so hab ichs glaube ich auch schon gemacht. Dann wird beim nächsten Start einfach die neue verwendet.
 

FArt

Top Contributor
Du kannst auch einfach die alte jar-Datei direkt beim herunterladen überschreiben, so hab ichs glaube ich auch schon gemacht. Dann wird beim nächsten Start einfach die neue verwendet.

Das geht auch unter Windows? Und wenn das Programm weiterläuft und "alte" Ressourcen aus dem JAR geladen werden sollen? Und wenn der Download unterbrochen wird oder anderweitig schief geht, ist dann die Installation hinüber?
 
G

Gast2

Gast
Java:
public static main(String [] args)
{
    System.out.println("Program: '" + args[0] +"'");
}

wenn sich Java an C (macht auch nicht jeder C-Compiler) hält, dann sollte das funktionieren

hand, mogel
 

Chumax

Aktives Mitglied
Java:
	File jar = new File(this.getClass().getProtectionDomain().getCodeSource().getLocation()
				.getPath());
		String jarpath = jar.getAbsoluteFile().toString();
 

mabuhay

Bekanntes Mitglied
Das geht auch unter Windows? Und wenn das Programm weiterläuft und "alte" Ressourcen aus dem JAR geladen werden sollen? Und wenn der Download unterbrochen wird oder anderweitig schief geht, ist dann die Installation hinüber?
Ja das mit einem abgebrochenen Download ist so ne sache, hab noch nicht so weit überlegt, da ist herunterladen und ersetzten auf jeden Fall besser :oops:

@mabuhay
Das geht ja gar nicht, weil die Datei von java.exe aufgemacht wurd und noch nicht geschlossen wurde.
Ja scheint als hast du recht, habs gerade versucht. In Windows gehts nicht, in Ubuntu schon ^^ Aber was genau passiert, ob das gesamte jar beim start geladen wird weiss ich nicht...

Und nun zu den gegebenen Beispielen:
Ich kann zu 99% sagen dass alle den Arbeitspfad von Java zurückgeben, und nicht den tatsächlichen Pfad der jar-Datei! In Windows ist das schon der Pfad zur jar-Datei wenn auf die Datei doppelgeklickt wird, aber in Ubuntu ist es das home-Verzeichnis des Benutzers und je nachdem wie die jar-Datei in der Konsole (egal welches Betriebssystem) gestartet wird, ist der Arbeitspfad anders. Du musst den Pfad also irgendwo gespeichert haben.

Du kannst natürlich auch einen Starter installieren (zum beispiel Web Start) oder was eigenes was dann die jar-Datei aus einem bestimmten Verzeichnis (zum Beispiel dort wo Programmdaten liegen, App Data in Windows oder home in Ubuntu) startet. Somit kommst du mit etwas wie
Java:
                String updatePath = null;
		//Windows
		updatePath = System.getenv("APPDATA");
		//Unix
		if (updatePath == null) {
			updatePath = System.getProperty("user.home");
		}
		//Mac?

		updatePath = updatePath.concat(File.separator + "deinprogramm" + File.separator + "programm.jar");
zu deiner jar, kannst sie auch aktualisieren da du dort Schreibrechte hast und kannst die jar starten.

mfg
 

Ähnliche Java Themen

Neue Themen


Oben