Czy istnieje sposób ustalenia aktualnej lokalizacji systemu plików wykonywanej klasy z kodu tej klasy, w czasie wykonywania, biorąc pod uwagę, że jest wykonywany przy użyciu polecenia java
?Uzyskiwanie ścieżki do systemu plików klasy, która jest wykonywana
Na przykład dla następujących klas:
public class MyClass{
public static void main(String[] args){\
new MyClass().doStuff();
}
private void doStufF(){
String path = ... // what to do here?!
System.out.println("Path of class being invoked: " + path);
}
}
Czy istnieje jakiś sposób, aby uzyskać i wydrukować odpowiednią ścieżkę w systemie plików plik MyClass.class właśnie powołano?
Podobnie, jeśli wywołuję plik JAR z komendy java -jar
, czy istnieje sposób uzyskania ścieżki pliku jar z klas wewnątrz tego słoika?
P.S.:Proszę, nie należy przyjmować żadnych założeń dotyczących katalogu roboczego, od którego wywoływana jest komenda java
!
Uwaga: jeśli plik klasy znajduje się w katalogu, który zawiera spacje, zwracany ciąg (który jest część ścieżki adresu URL, która zwraca getLocation(), a zatem jest zakodowana w postaci adresu URL) będzie zawierała "% 20" zamiast spacji! –
@JandeVos Konstruktor 'File (java.net.URI)' wydaje się naprawić ten problem. – Spooky
@ Spooky's comment: więc musi to być 'final File f = new File (MyClass.class.getProtectionDomain(). GetCodeSource(). GetLocation(). GetURI(). GetPath());' –