Wie definiere ich einen relativen Pfad in Java (Windows)

Hier ist die Struktur meines Projekts:

Hier ist die Struktur meines Projekts

Ich muss config.properties in MyClass.java lesen. Ich habe versucht, dies mit einem relativen Pfad wie folgt zu tun:

 // Code called from MyClass.java File f1 = new File("..\\..\\..\\config.properties"); String path = f1.getPath(); prop.load(new FileInputStream(path)); 

Dies gibt mir den folgenden Fehler:

 ..\..\..\config.properties (The system cannot find the file specified) 

Wie kann ich einen relativen Pfad in Java definieren? Ich benutze jdk 1.6 und arbeite an Windows.

Probieren Sie so etwas aus

 String filePath = new File("").getAbsolutePath(); filePath.concat("path to the property file"); 

Die neue Datei verweist also auf den Pfad, in dem sie erstellt wurde, normalerweise auf den Projektordner Ihres Projekts.

[BEARBEITEN]

Wie @cmc sagte,

  String basePath = new File("").getAbsolutePath(); System.out.println(basePath); String path = new File("src/main/resources/conf.properties") .getAbsolutePath(); System.out.println(path); 

Beide geben denselben Wert an.

  File f1 = new File("..\\..\\..\\config.properties"); 

Dieser Pfad, der versucht, auf die Datei zuzugreifen, befindet sich im Projektverzeichnis. Greifen Sie dann einfach auf diese Datei zu.

 File f=new File("filename.txt"); 

wenn sich Ihre Datei in OtherSources/Resources

 this.getClass().getClassLoader().getResource("relative path");//-> relative path from resources folder 

Es ist erwähnenswert, dass in einigen Fällen

 File myFolder = new File("directory"); 

zeigt nicht auf die Wurzelelemente. Wenn Sie beispielsweise Ihre Anwendung auf Laufwerk C: ( C:\myApp.jar ) myFolder zeigt myFolder auf (windows)

 C:\Users\USERNAME\directory 

Anstatt von

 C:\Directory 

Sehen Sie sich zunächst den Unterschied zwischen absolutem Pfad und relativem Pfad an :

Ein absoluter Pfad enthält immer das Stammelement und die vollständige Verzeichnisliste, die zum Suchen der Datei erforderlich ist.

Alternativ dazu muss ein relativer Pfad mit einem anderen Pfad kombiniert werden, um auf eine Datei zugreifen zu können.

Im Konstruktor File (String pathname) sagt Javadocs File-class das

Ein Pfadname, ob abstrakt oder in Form einer Zeichenfolge, kann entweder absolut oder relativ sein.

Wenn Sie einen relativen Pfad erhalten möchten, müssen Sie den Pfad vom aktuellen Arbeitsverzeichnis zum Verzeichnis oder Verzeichnis angeben. Versuchen Sie, die Systemeigenschaften zu verwenden, um dies zu erhalten.Als die von Ihnen gezeichneten Bilder:

 String localDir = System.getProperty("user.dir"); File file = new File(localDir + "\\config.properties"); 

Darüber hinaus sollten Sie vermeiden, ähnliche “.”, “../”, “/” und ähnliche relativ zum relativen Pfad der Dateiposition zu verwenden, da das Verschieben von Dateien schwieriger ist.

  public static void main(String[] args) { Properties prop = new Properties(); InputStream input = null; try { File f=new File("config.properties"); input = new FileInputStream(f.getPath()); prop.load(input); System.out.println(prop.getProperty("name")); } catch (IOException ex) { ex.printStackTrace(); } finally { if (input != null) { try { input.close(); } catch (IOException e) { e.printStackTrace(); } } } } 

Sie können auch verwenden
Pfad path1 = FileSystems.getDefault (). GetPath (System.getProperty (“user.home”), “downloads”, “somefile.txt”);

Ich habe Probleme beim Hinzufügen von Screenshots zu ExtentReports mit einem relativen Pfad zu meiner Bilddatei. Mein aktuelles Verzeichnis bei der Ausführung ist “C: \ Eclipse 64-bit \ eclipse \ workspace \ seleniumiumPractic”. Unter diesem habe ich den Ordner ExtentReports für die report.html und den image.png Screenshot wie unten erstellt.

 private String className = getClass().getName(); private String outputFolder = "ExtentReports\\"; private String outputFile = className + ".html"; ExtentReports report; ExtentTest test; @BeforeMethod // initialise report variables report = new ExtentReports(outputFolder + outputFile); test = report.startTest(className); // more setup code @Test // test method code with log statements @AfterMethod // takeScreenShot returns the relative path and filename for the image String imgFilename = GenericMethods.takeScreenShot(driver,outputFolder); String imagePath = test.addScreenCapture(imgFilename); test.log(LogStatus.FAIL, "Added image to report", imagePath); 

Dies erstellt den Bericht und das Bild im ExtentReports-Ordner, aber wenn der Bericht geöffnet und das (leere) Bild inspiziert wird, zeigt der Mauszeiger über dem Bild src “Das Bild konnte nicht geladen werden” src = “. \ ExtentReports \ QXKmoVZMW7.png”.

Dies wird dadurch getriggers, dass der relative Pfad und Dateiname für das Image der Systemeigenschaft “user.dir” vorangestellt wird. Das funktioniert einwandfrei und das Bild erscheint im HTML-Bericht.

Chris

 String imgFilename = GenericMethods.takeScreenShot(driver,System.getProperty("user.dir") + "\\" + outputFolder); String imagePath = test.addScreenCapture(imgFilename); test.log(LogStatus.FAIL, "Added image to report", imagePath); 

Beispiel für Spring Boot. Meine WSDL-Datei befindet sich in Ressourcen im “wsdl” -Ordner. Der Pfad zur WSDL-Datei lautet:

Ressourcen / wsdl / WebServiceFile.wsdl

Um den Pfad von einer Methode zu dieser Datei zu erhalten, können Sie Folgendes tun:

 String pathToWsdl = this.getClass().getClassLoader(). getResource("wsdl\\WebServiceFile.wsdl").toString();