Come definire un percorso relativo in java (Windows)


Ecco la struttura del mio progetto:

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.

Author: Rishabh Agarwal, 2013-01-08

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.

 60
Author: VinayVeluri, 2016-11-05 09:58:45
 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
 3
Author: Abin M Devasia, 2013-01-08 06:21:36

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
 2
Author: Danon, 2015-01-28 21:59:35

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.

 1
Author: hoapham, 2018-01-28 04:27:12
 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");

 0
Author: yahitesh, 2015-08-18 09:51:56

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);
 0
Author: Chris Liston, 2017-03-10 16:40:38

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();
 0
Author: Kirill Ch, 2018-02-14 15:24:52