Come definire un percorso relativo in java (Windows)
Ecco la struttura del mio progetto:
Ho bisogno di leggere config.properties
all'interno di MyClass.java
.
Ho provato a farlo con un percorso relativo come segue:
// Code called from MyClass.java
File f1 = new File("..\\..\\..\\config.properties");
String path = f1.getPath();
prop.load(new FileInputStream(path));
Questo mi dà il seguente errore:
..\..\..\config.properties (The system cannot find the file specified)
Come posso definire un percorso relativo in java ? Sto usando jdk 1.6 e sto lavorando su Windows.
7 answers
Prova qualcosa del genere
String filePath = new File("").getAbsolutePath();
filePath.concat("path to the property file");
Quindi il nuovo file punta al percorso in cui è stato creato, di solito la cartella home del progetto.
[MODIFICA]
Come ha detto @cmc,
String basePath = new File("").getAbsolutePath();
System.out.println(basePath);
String path = new File("src/main/resources/conf.properties")
.getAbsolutePath();
System.out.println(path);
Entrambi danno lo stesso valore.
File f1 = new File("..\\..\\..\\config.properties");
Questo percorso che tenta di accedere al file si trova nella directory del progetto, quindi accedi al file in questo modo.
File f=new File("filename.txt");
Se il file è in OtherSources/Resources
this.getClass().getClassLoader().getResource("relative path");//-> relative path from resources folder
Vale la pena ricordare che in alcuni casi
File myFolder = new File("directory");
Non punta agli elementi radice. Ad esempio, quando si posiziona l'applicazione sull'unitàC:
(C:\myApp.jar
), myFolder
punta a (windows)
C:\Users\USERNAME\directory
Invece di
C:\Directory
In primo luogo, vedere la differenza tra percorso assoluto e percorso relativo qui:
Un percorso assoluto contiene sempre l'elemento radice e l'elenco completo delle directory necessarie per individuare il file.
In alternativa, un percorso relativo deve essere combinato con un altro percorso per accedere a un file.
Nel file contructor (String pathname), la classe File di Javadoc diceva che
Un percorso, astratto o in forma di stringa, può essere assoluto o relativo.
Se si desidera ottenere il percorso relativo, è necessario definire il percorso dalla directory di lavoro corrente a fle o directory.Provare a utilizzare proprietà di sistema per ottenere this.As le immagini che hai disegnato:
String localDir = System.getProperty("user.dir");
File file = new File(localDir + "\\config.properties");
Inoltre, dovresti cercare di evitare di usare simili ".", "../ ", "/"e altri simili relativi al percorso relativo del percorso del file, perché quando i file vengono spostati, è più difficile da gestire.
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();
}
}
}
}
È inoltre possibile utilizzare
Path path1 = Filesystem.getDefault().getPath (Sistema.getProperty ("utente.home"), "download", " alcunifile.txt");
Stavo avendo problemi ad allegare screenshot a ExtentReports usando un percorso relativo al mio file immagine. La mia directory corrente durante l'esecuzione è "C:\Eclipse 64-bit\eclipse \ workspace \ SeleniumPractic". Sotto questo, ho creato la cartella ExtentReports per entrambi i report.html e l'immagine.immagine png come di seguito.
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);
Questo crea il report e l'immagine nella cartella ExtentReports, ma quando il report viene aperto e l'immagine (vuota) ispezionata, passando il mouse sopra l'immagine src mostra "Potrebbe non caricare l'immagine " src=".\ ExtentReports \ QXKmoVZMW7.png".
Questo è risolto prefissando il percorso relativo e il nome del file per l'immagine con la proprietà di sistema "user.dir". Quindi funziona perfettamente e l'immagine appare nel report html.
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);
Esempio di avvio a molla. Il mio file WSDL si trova nelle risorse nella cartella "wsdl". Il percorso del file WSDL è:
Risorse / wsdl / WebServiceFile.wsdl
Per ottenere il percorso da qualche metodo a questo file puoi fare quanto segue:
String pathToWsdl = this.getClass().getClassLoader().
getResource("wsdl\\WebServiceFile.wsdl").toString();