Angenommen, Sie versuchen, Ihr Projekt in Eclipse, Netbean oder eigenständig von der Befehlszeile aus auszuführen. Ich habe eine Methode geschrieben, um das 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, um innerhalb von Eclipse zu laufen
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, um innerhalb von Netbean zu laufen
if (basePath.endsWith(File.separator + "build" + File.separator + "classes")) {
basePath = basePath.substring(0, basePath.length() - 14);
}
// Ende der Korrektur
if (!basePath.endsWith(File.separator)) {
basePath = basePath + File.separator;
}
return basePath;
} catch (URISyntaxException e) {
throw new RuntimeException("Kann Basispfad für Klasse nicht feststellen: " + clazz.getName());
}
}
Um es zu verwenden, übergeben Sie überall, wo Sie den Basispfad zum Lesen von Dateien erhalten möchten, Ihre Ankerklasse an die obige Methode, das Ergebnis könnte das sein, was Sie benötigen :D
Beste Grüße,