Wie bekomme ich das aktuelle Arbeitsverzeichnis in Java?

1029

Ich möchte mit Java auf mein aktuelles Arbeitsverzeichnis zugreifen.

Mein Code:

 String current = new java.io.File( "." ).getCanonicalPath();
        System.out.println("Current dir:"+current);
 String currentDir = System.getProperty("user.dir");
        System.out.println("Current dir using System:" +currentDir);

Ausgabe:

Current dir: C:\WINDOWS\system32
Current dir using System: C:\WINDOWS\system32

Meine Ausgabe ist nicht korrekt, da das Laufwerk C nicht mein aktuelles Verzeichnis ist.

Wie erhalte ich das aktuelle Verzeichnis?

Qazi
quelle
2
Können Sie hier einfügen, was Sie sehen, wenn Sie den cdBefehl an Ihrer Eingabeaufforderung ausführen, wenn Sie diesen ausführen?
Nishant
3
Was möchten Sie mit dem Zugriff auf das Arbeitsverzeichnis erreichen? Könnte dies stattdessen über den Klassenpfad erfolgen? Wenn Sie beispielsweise eine Textdatei im Dateisystem lesen müssen, können Sie sie leicht finden, wenn sie sich im Klassenpfad befindet.
Earldouglas
1
Wie? Könnten Sie bitte näher darauf eingehen?
C Grafiken
1
Einige Informationen zum Zugriff auf eine Datei im Klassenpfad finden Sie unter stackoverflow.com/questions/1464291/…
downeyt
7
Für Debugging-Zwecke kann das Arbeitsverzeichnis hilfreich sein, um festzustellen, ob das Programm nicht auf vorhandene Dateien zugreifen kann.
Nsandersen

Antworten:

1152
public class JavaApplication {
  public static void main(String[] args) {
       System.out.println("Working Directory = " + System.getProperty("user.dir"));
  }
}

Dadurch wird ein vollständiger absoluter Pfad gedruckt, von dem aus Ihre Anwendung initialisiert wurde.


Aus der Dokumentation :

java.ioRelative Pfadnamen für die Paketauflösung unter Verwendung des aktuellen Benutzerverzeichnisses. Das aktuelle Verzeichnis wird als Systemeigenschaft dargestellt, user.dirdh das Verzeichnis, aus dem die JVM aufgerufen wurde.

Anuj Patel
quelle
25
@ubuntudroid: Deshalb habe ich ausdrücklich erwähnt, dass der Pfad gedruckt wird, von dem aus die Anwendung initialisiert wurde. Ich vermute, der Thread-Starter führt das JAR / Programm direkt nach dem Start der Eingabeaufforderung commnad aus (im Grunde genommen unter C: \ WINDOWS \ system32). Ich hoffe du verstehst meinen Punkt. Angenommen, Sie haben abgelehnt, schätzen Sie, dass Sie zumindest eine Antwort hinterlassen möchten. :)
Anuj Patel
1
user.dir erhält den Pfad zu dem Ordner, in dem der Prozess gestartet wurde. Den tatsächlichen Pfad zum Hauptordner der Anwendung finden Sie in meiner Antwort unten.
Peter De Winter
1
Ich meine "Der gesamte Code, der darauf angewiesen ist , das aktuelle Verzeichnis zu finden, schlägt fehl." Nicht der gesamte Code im Allgemeinen. (Ich war zu langsam, um den ursprünglichen Kommentar zu bearbeiten)
SubOptimal
13
@SubOptimal, wenn der Benutzer -Duser.dir festgelegt hat, möchte er dies wahrscheinlich in einem benutzerdefinierten Arbeitsverzeichnis ausführen.
Barwnikk
5
@indyaah infact diese Antwort ist falsch, es gibt einen subtilen Unterschied zwischen einem Benutzer-Arbeitsverzeichnis und einem aktuellen Arbeitsverzeichnis eines Systemprozesses (cwd); Meistens zeigt "user.dir" auf das cwd eines (Java-) Prozesses. "user.dir" hat jedoch eine andere Semantik und darf nicht verwendet werden, um die cwd eines Java-Prozesses zu erhalten. Übrigens: Es gibt mehr Eigenschaften für den Java-Prozess docs.oracle.com/javase/tutorial/essential/environment/… nur als Referenz
comeGetSome
382

Siehe: http://docs.oracle.com/javase/tutorial/essential/io/pathOps.html

Mit java.nio.file.Pathund java.nio.file.Pathskönnen Sie Folgendes tun, um zu zeigen, was Java für Ihren aktuellen Pfad hält. Dies gilt für 7 und mehr und verwendet NIO.

Path currentRelativePath = Paths.get("");
String s = currentRelativePath.toAbsolutePath().toString();
System.out.println("Current relative path is: " + s);

Dies gibt aus, Current relative path is: /Users/george/NetBeansProjects/Tutorialsdass in meinem Fall die Klasse ausgeführt wurde. Wenn Sie Pfade relativ konstruieren, indem Sie kein führendes Trennzeichen verwenden, um anzuzeigen, dass Sie einen absoluten Pfad erstellen, wird dieser relative Pfad als Ausgangspunkt verwendet.

geoO
quelle
2
Der erste wurde nicht überprüft, aber der zweite erhält tatsächlich Ihren Home-Ordner. Nicht das aktuelle Arbeitsverzeichnis, in dem die Anwendung ausgeführt wird.
Peter De Winter
12
Bitte verwechseln Sie nicht das Ausgangsverzeichnis des Benutzers (in Ihrem Fall "user.home", / Users / george) und das aktuelle Arbeitsverzeichnis ("user.dir"). Dies ist das Verzeichnis, aus dem Sie die JVM für Ihre Anwendung gestartet haben , könnte so etwas sein wie zB / Users / george / workspace / FooBarProject).
David
1
Ich bevorzuge diesen Weg. Wenn ich das übergeordnete Element des Arbeitsverzeichnisses benötige, funktioniert dies nicht : Paths.get("").getParent(), gibt es null. Stattdessen funktioniert dies : Paths.get("").toAbsolutePath().getParent().
Ole VV
235

Die folgenden Arbeiten auf Java 7 und höher (siehe hier für Dokumentation).

import java.nio.file.Paths;

Paths.get(".").toAbsolutePath().normalize().toString();
Dmitry Bespalov
quelle
11
Wie ist das besser als das tragbarere import java.io.File; File(".").getAbsolutePath()?
Evgeni Sergeev
8
Wenn Sie Portable sagen, meinen Sie, dass es in Java 6 und früher funktioniert? Paths.get()kann insofern als besser angesehen werden, als es direkten Zugriff auf die leistungsfähigere PathSchnittstelle bietet.
Ole VV
8
Was ist der potenzielle Vorteil der Verwendung .normalize()in diesem Zusammenhang?
Ole VV
7
@ OleV.V. Aus Javadoc: ( Methode normalisieren )Returns a path that is this path with redundant name elements eliminated.
Stephan
Wäre in diesem Fall schon normalisiert.
JM Becker
73

Dadurch erhalten Sie den Pfad Ihres aktuellen Arbeitsverzeichnisses:

Path path = FileSystems.getDefault().getPath(".");

Und dies gibt Ihnen den Pfad zu einer Datei namens "Foo.txt" im Arbeitsverzeichnis:

Path path = FileSystems.getDefault().getPath("Foo.txt");

Bearbeiten: Um einen absoluten Pfad des aktuellen Verzeichnisses zu erhalten:

Path path = FileSystems.getDefault().getPath(".").toAbsolutePath();

* Update * So erhalten Sie das aktuelle Arbeitsverzeichnis:

Path path = FileSystems.getDefault().getPath("").toAbsolutePath();
Kennzeichen
quelle
11
dies gibt nur '.' zurück. für mich.
John Ktejik
3
Ja, in vielen Systemen ist dies der Verweis auf das Arbeitsverzeichnis. Um den absoluten Pfad zu erhalten, können Sie einen weiteren Methodenaufruf hinzufügenPath path = FileSystems.getDefault().getPath(".").toAbsolutePath();
Mark
2
Sie brauchen die foo.txt nicht, geben Sie einfach eine leere Zeichenfolge ein, um das Verzeichnis zu erhalten
John Ktejik
1
Unter Windows (10) gibt mir dies nur ein PathObjekt, das auf eine Datei verweist, .die im aktuellen Arbeitsverzeichnis aufgerufen wird. Verwenden Sie eine leere Zeichenfolge, anstatt "."für mich zu arbeiten.
Kröw
36

Das ist die Lösung für mich

File currentDir = new File("");
user2430452
quelle
1
Dies hat Nebenwirkungen, wenn Sie ein solches Dateiobjekt als
übergeordnetes
13
Verwenden Sie new File("").getAbsoluteFile()stattdessen, um dies zu beheben .
MRalwasser
4
Für das, was es wert ist, hatte ich besseres Glück mit File (".").
Keshlam
So definieren Sie einen relativen Pfad in Java Diese Seite hat mir geholfen. Außerdem habe ich angenommen, dass ich /beim Erstellen eines relativen Pfads verwenden sollte. Ich habe mich geirrt, fang nicht damit an /. ../funktioniert auch zum Aufsteigen in den Verzeichnisbaum.
Irrationalkilla
@keshlam Das gab mir eine Datei im aktuellen Verzeichnis namens ..
Kröw
32

Ich habe diese Lösung in den Kommentaren gefunden, die besser als andere und tragbarer ist:

String cwd = new File("").getAbsolutePath();

Oder auch

String cwd = Paths.get("").toAbsolutePath();
freedev
quelle
Dies ist genau das Gleiche wie die Antwort von comeGetSome und ist tatsächlich der Java <7-Weg
GoGoris
30

Was lässt Sie denken, dass c: \ windows \ system32 nicht Ihr aktuelles Verzeichnis ist? Dasuser.dir Eigenschaft soll explizit "Aktuelles Arbeitsverzeichnis des Benutzers" sein.

Anders ausgedrückt, c: \ windows \ system32 ist wahrscheinlich Ihr CWD , es sei denn, Sie starten Java über die Befehlszeile . Wenn Sie also doppelklicken, um Ihr Programm zu starten, ist es unwahrscheinlich, dass CWD das Verzeichnis ist, aus dem Sie doppelklicken.

Bearbeiten : Es scheint, dass dies nur für alte Windows- und / oder Java-Versionen gilt.

Paul Wagland
quelle
2
Dies scheint nicht zu stimmen, zumindest nicht auf meinem Windows 7-Computer mit Java 7. Dies user.dirist durchweg der Ordner, in dem ich auf die JAR-Datei doppelklickt habe.
Jolta
26

Verwenden Sie CodeSource#getLocation().

Dies funktioniert auch in JAR-Dateien einwandfrei. Sie können erhalten CodeSourcevon ProtectionDomain#getCodeSource()und die ProtectionDomainwiederum können erhalten werden von Class#getProtectionDomain().

public class Test {
    public static void main(String... args) throws Exception {
        URL location = Test.class.getProtectionDomain().getCodeSource().getLocation();
        System.out.println(location.getFile());
    }
}
Bigoloo
quelle
2
Dies gibt den Speicherort der JAR-Datei zurück. Nicht das, wonach gefragt wurde.
Marquis von Lorne
22
this.getClass().getClassLoader().getResource("").getPath()
Peter De Winter
quelle
12
Wirft eine NPE, wenn ich meine Anwendung aus einer JAR-Datei starte, indem ich darauf doppelklicke.
Matthew Wise
2
Dies wird zurückgegeben, ""wenn die Anwendung aus einer JAR-Datei oder einem CLASSPATH-Element ausgeführt wird. Nicht das, wonach gefragt wurde.
Marquis von Lorne
@ Zizouz212 getClass()ist eine Objektmethode, daher funktioniert es in einem statischen Kontext nicht, nur das zu entfernen this. Sie müssten sich explizit auf die Klasse beziehen, in der Sie sich befinden MyClass.class.getClassLoader()......
Kröw
Trotzdem wird das Arbeitsverzeichnis nicht zurückgegeben ...
Angel O'Sphere
18

Im Allgemeinen als Dateiobjekt:

File getCwd() {
  return new File("").getAbsoluteFile();
}

Möglicherweise möchten Sie eine vollständig qualifizierte Zeichenfolge wie "D: / a / b / c" ausführen.

getCwd().getAbsolutePath()
Hol dir welche
quelle
1
Dies funktioniert gut in Android-Tests, da Android java.nio.file.Files nicht enthält.
Iamreptar
Scheint in einem statischen Kontext nicht für mich zu funktionieren (neue Datei ("") löst NullPointerException aus) ..?
Nsandersen
2
@nsandersen Sie haben wahrscheinlich ein falsches Dateiobjekt verwendet: System.out.println (new java.io.File (""). getAbsolutePath ());
ComeGetSome
5

Auf Linux beim Ausführen jar - Datei aus Terminal , kehren diese beide gleich String: „/ home / Current“ , egal, wo ich ist JAR - Datei ist. Es hängt nur davon ab, welches aktuelle Verzeichnis Sie mit Ihrem Terminal verwenden, wenn Sie die JAR-Datei starten.

Paths.get("").toAbsolutePath().toString();

System.getProperty("user.dir");

Wenn Ihr Classmit mainangerufen werden würde MainClass, dann versuchen Sie:

MainClass.class.getProtectionDomain().getCodeSource().getLocation().getFile();

Dies gibt einen Stringmit absolutem Pfad der JAR- Datei zurück.

Jan Povolný
quelle
3
Welches ist nicht das, wonach gefragt wurde.
Marquis von Lorne
5

Wenn Sie Windows verwenden, gibt user.dir das Verzeichnis wie erwartet zurück, jedoch NICHT, wenn Sie Ihre Anwendung mit erhöhten Rechten starten (als Administrator ausführen). In diesem Fall erhalten Sie C: \ WINDOWS \ system32

SijeDeHaan
quelle
3

Ich hoffe, Sie möchten auf das aktuelle Verzeichnis einschließlich des Pakets zugreifen. Wenn sich Ihr Java-Programm in befindet c:\myApp\com\foo\src\service\MyTest.javaund Sie bis dahin drucken möchten, c:\myApp\com\foo\src\servicekönnen Sie den folgenden Code ausprobieren:

String myCurrentDir = System.getProperty("user.dir")
            + File.separator
            + System.getProperty("sun.java.command")
                    .substring(0, System.getProperty("sun.java.command").lastIndexOf("."))
                    .replace(".", File.separator);
    System.out.println(myCurrentDir);

Hinweis: Dieser Code wird nur in Windows mit Oracle JRE getestet.

JSS
quelle
6
Es wäre ein schlechter Dienst, diese Antwort nicht abzulehnen. Bitte überlegen Sie genauer, bevor Sie etwas veröffentlichen. Ihr Code ist fehlerhaft, es sei denn, all dies ist wahr: 1. Die JRE gehört Oracle, andernfalls gibt es keine Systemeigenschaft "sun.java.command" → NPE; 2. Das Betriebssystem ist Windows ( File.separatorstattdessen verwenden oder ein FileKonstruktor mit mehreren Argumenten ). 3. Der Klassenpfad wird in der Befehlszeile angegeben, und das 'aktuelle Verzeichnis einschließlich des Pakets' (??) lautet: a. zuerst angegeben, b. absolut angegeben, c. stimmt genau mit dem CWD überein (auch bei Windows-Groß- und Kleinschreibung), und d. ist ein Nachkomme des CWD
Michael Scheper
Damit werden die Punkte 1 und 2 angesprochen. Wenn mir jedoch nichts fehlt, verlassen Sie sich immer noch auf den in der Befehlszeile angegebenen Klassenpfad (dh nicht in einer Umgebungsvariablen) und auf das 'aktuelle Verzeichnis einschließlich des Pakets' (I. Ich gebe zu, ich verstehe nicht wirklich, was du damit meinst.) Ich bin ein Nachkomme des ersten Elements im Klassenpfad. Und das Problem der Fallübereinstimmung bleibt bestehen. Es tut mir leid, wenn mein Kommentar nicht hilfreich war. Ich habe Klarheit geopfert, um die Zeichenbeschränkung für Kommentare einzuhalten.
Michael Scheper
@Inversus, es funktioniert nur in einigen Umgebungen "perfekt"; Sie hatten einfach das Glück, es auf diese Weise zu testen. Das Schreiben von Software, die in legitimen Laufzeitumgebungen fehlschlägt, ist keine gute Vorgehensweise, selbst wenn Ihre Testumgebungen nicht umfangreich genug sind, um sie einzuschließen.
Charles Duffy
@ CharlesDuffy Du hast recht, das ist keine gute Praxis. Glücklicherweise führte diese Lösung "das Lösen meines spezifischen Problems" nicht dazu, dass sie "in legitimen Laufzeitumgebungen [fehlschlug]". Tatsächlich hat es mir geholfen, einen solchen Fehler zu beheben und robusteren Code zu schreiben, abgesehen von der Lösung des sehr spezifischen Problems, das ich hatte (das nur etwas mit dieser Frage / Antwort zu tun hatte). Ich glaube, ich hatte einfach Glück, es zu finden.
Inversus
3

Erwähnen Sie, dass es nur eingecheckt ist, Windowsaber ich denke, es funktioniert perfekt auf anderen Betriebssystemen [ Linux,MacOs,Solaris] :).


Ich hatte 2 .jar Dateien im selben Verzeichnis. Ich wollte von der einen .jarDatei die andere .jarDatei starten, die sich im selben Verzeichnis befindet.

Das Problem ist, dass beim Starten aus cmddem aktuellen Verzeichnis ist system32.


Warnungen!

  • Das Folgende scheint in all den Tests, die ich selbst mit Ordnernamen ;][[;'57f2g34g87-8+9-09!2#@!$%^^&()oder durchgeführt habe, ziemlich gut zu funktionieren()%&$%^@# es funktioniert gut.
  • Ich benutze das ProcessBuildermit dem folgenden wie folgt:

🍂 ..

//The class from which i called this was the class `Main`
String path = getBasePathForClass(Main.class);
String applicationPath=  new File(path + "application.jar").getAbsolutePath();


System.out.println("Directory Path is : "+applicationPath);

//Your know try catch here
//Mention that sometimes it doesn't work for example with folder `;][[;'57f2g34g87-8+9-09!2#@!$%^^&()` 
ProcessBuilder builder = new ProcessBuilder("java", "-jar", applicationPath);
builder.redirectErrorStream(true);
Process process = builder.start();

//...code

🍂 getBasePathForClass(Class<?> classs):

    /**
     * Returns the absolute path of the current directory in which the given
     * class
     * file is.
     * 
     * @param classs
     * @return The absolute path of the current directory in which the class
     *         file is.
     * @author GOXR3PLUS[StackOverFlow user] + bachden [StackOverFlow user]
     */
    public static final String getBasePathForClass(Class<?> classs) {

        // Local variables
        File file;
        String basePath = "";
        boolean failed = false;

        // Let's give a first try
        try {
            file = new File(classs.getProtectionDomain().getCodeSource().getLocation().toURI().getPath());

            if (file.isFile() || file.getPath().endsWith(".jar") || file.getPath().endsWith(".zip")) {
                basePath = file.getParent();
            } else {
                basePath = file.getPath();
            }
        } catch (URISyntaxException ex) {
            failed = true;
            Logger.getLogger(classs.getName()).log(Level.WARNING,
                    "Cannot firgue out base path for class with way (1): ", ex);
        }

        // The above failed?
        if (failed) {
            try {
                file = new File(classs.getClassLoader().getResource("").toURI().getPath());
                basePath = file.getAbsolutePath();

                // the below is for testing purposes...
                // starts with File.separator?
                // String l = local.replaceFirst("[" + File.separator +
                // "/\\\\]", "")
            } catch (URISyntaxException ex) {
                Logger.getLogger(classs.getName()).log(Level.WARNING,
                        "Cannot firgue out base path for class with way (2): ", ex);
            }
        }

        // fix to run inside eclipse
        if (basePath.endsWith(File.separator + "lib") || basePath.endsWith(File.separator + "bin")
                || basePath.endsWith("bin" + File.separator) || basePath.endsWith("lib" + File.separator)) {
            basePath = basePath.substring(0, basePath.length() - 4);
        }
        // fix to run inside netbeans
        if (basePath.endsWith(File.separator + "build" + File.separator + "classes")) {
            basePath = basePath.substring(0, basePath.length() - 14);
        }
        // end fix
        if (!basePath.endsWith(File.separator)) {
            basePath = basePath + File.separator;
        }
        return basePath;
    }
GOXR3PLUS
quelle
Dies gibt den Speicherort der JAR-Datei zurück. Nicht das, wonach gefragt wurde.
Marquis von Lorne
@EJP Der Speicherort der .jar-Datei ist nicht das aktuelle Arbeitsverzeichnis des Java-Programms?
GOXR3PLUS
2

Das aktuelle Arbeitsverzeichnis ist in verschiedenen Java-Implementierungen unterschiedlich definiert. Für bestimmte Versionen vor Java 7 gab es keine konsistente Möglichkeit, das Arbeitsverzeichnis abzurufen. Sie können dies umgehen, -Dindem Sie eine Java-Datei mit starten und eine Variable definieren, die die Informationen enthält

Etwas wie

java -D com.mycompany.workingDir="%0"

Das ist nicht ganz richtig, aber Sie bekommen die Idee. Dann System.getProperty("com.mycompany.workingDir")...

MJB
quelle
6
Nicht relevant für die Frage.
Peter De Winter
1
Es hat eine Bedeutung für Java - es ist der Speicherort auf der Festplatte, zu dem Dateien, die Sie mit relativen Pfadnamen öffnen, relativ sind.
Rob I
2
Ja, es hat eine Bedeutung. Meine Worte waren etwas schlecht gewählt. Aber Sie verpassen den Punkt - vor Java 7 gab es keine Möglichkeit, das aktuelle Arbeitsverzeichnis zu kennen, und verschiedene Implementierungen setzten sie ... unterschiedlich ...
MJB
1

Angenommen, Sie versuchen, Ihr Projekt in Eclipse oder NetBean auszuführen oder über die Befehlszeile allein zu stehen. Ich habe eine Methode geschrieben, um das Problem zu beheben

public static final String getBasePathForClass(Class<?> clazz) {
    File file;
    try {
        String basePath = null;
        file = new File(clazz.getProtectionDomain().getCodeSource().getLocation().toURI().getPath());
        if (file.isFile() || file.getPath().endsWith(".jar") || file.getPath().endsWith(".zip")) {
            basePath = file.getParent();
        } else {
            basePath = file.getPath();
        }
        // fix to run inside eclipse
        if (basePath.endsWith(File.separator + "lib") || basePath.endsWith(File.separator + "bin")
                || basePath.endsWith("bin" + File.separator) || basePath.endsWith("lib" + File.separator)) {
            basePath = basePath.substring(0, basePath.length() - 4);
        }
        // fix to run inside netbean
        if (basePath.endsWith(File.separator + "build" + File.separator + "classes")) {
            basePath = basePath.substring(0, basePath.length() - 14);
        }
        // end fix
        if (!basePath.endsWith(File.separator)) {
            basePath = basePath + File.separator;
        }
        return basePath;
    } catch (URISyntaxException e) {
        throw new RuntimeException("Cannot firgue out base path for class: " + clazz.getName());
    }
}

Überall dort, wo Sie den Basispfad zum Lesen der Datei erhalten möchten, können Sie Ihre Ankerklasse an die obige Methode übergeben. Das Ergebnis ist möglicherweise das, was Sie benötigen: D.

Beste,

bachden
quelle
2
Dies gibt den Speicherort der JAR-Datei zurück. Nicht das, wonach gefragt wurde.
Marquis von Lorne
@ user207421 Ja, ich weiß, dass diese Antwort nicht die richtige Antwort auf die Frage ist, aber meistens möchte jeder das "Verzeichnis, in dem sich die Gläser befinden" anstelle des "Befehlszeilen-Arbeitsverzeichnisses" erhalten.
Bachden
0

Keine der hier veröffentlichten Antworten hat bei mir funktioniert. Folgendes hat funktioniert:

java.nio.file.Paths.get(
  getClass().getProtectionDomain().getCodeSource().getLocation().toURI()
);

Bearbeiten: Die endgültige Version in meinem Code:

URL myURL = getClass().getProtectionDomain().getCodeSource().getLocation();
java.net.URI myURI = null;
try {
    myURI = myURL.toURI();
} catch (URISyntaxException e1) 
{}
return java.nio.file.Paths.get(myURI).toFile().toString()
Ehrwürdige Agenten
quelle
Dies gibt den Speicherort der JAR-Datei zurück. Nicht das, wonach gefragt wurde.
Marquis von Lorne
0

Dies ist meine Silberkugel, wenn jemals der Moment der Verwirrung hereinbricht (nenne es als erstes in der Hauptsache). Möglicherweise wird JVM beispielsweise von IDE auf eine andere Version verschoben. Diese statische Funktion durchsucht die aktuelle Prozess-PID und öffnet VisualVM für diese PID. Die Verwirrung hört genau dort auf, weil Sie alles wollen und es bekommen ...

  public static void callJVisualVM() {
    System.out.println("USER:DIR!:" + System.getProperty("user.dir"));
    //next search current jdk/jre
    String jre_root = null;
    String start = "vir";
    try {
        java.lang.management.RuntimeMXBean runtime =
                java.lang.management.ManagementFactory.getRuntimeMXBean();
        String jvmName = runtime.getName();
        System.out.println("JVM Name = " + jvmName);
        long pid = Long.valueOf(jvmName.split("@")[0]);
        System.out.println("JVM PID  = " + pid);
        Runtime thisRun = Runtime.getRuntime();
        jre_root = System.getProperty("java.home");
        System.out.println("jre_root:" + jre_root);
        start = jre_root.concat("\\..\\bin\\jvisualvm.exe " + "--openpid " + pid);
        thisRun.exec(start);
    } catch (Exception e) {
        System.getProperties().list(System.out);
        e.printStackTrace();
    }
}
Kurskinen
quelle
-6

System.getProperty("java.class.path")

Marko Stojkovic
quelle
-7

Dies ist der aktuelle Verzeichnisname

String path="/home/prasad/Desktop/folderName";
File folder = new File(path);
String folderName=folder.getAbsoluteFile().getName();

Dies ist der aktuelle Verzeichnispfad

String path=folder.getPath();
Prasad De Silva
quelle
1
Das OP wollte das aktuelle Arbeitsverzeichnis, von dem aus die Anwendung ausgeführt wurde.
Leif Gruenwoldt
Dies ist Ihr Home- Verzeichnis, nicht das aktuelle Arbeitsverzeichnis von irgendjemandem, außer vielleicht Ihrem . Nicht das, wonach gefragt wurde.
Marquis von Lorne