Comment définir un chemin relatif en java (Windows)


Voici la structure de mon projet :

voici la structure de mon projet

J'ai besoin de lire config.properties dans MyClass.java. J'ai essayé de le faire avec un chemin relatif, comme suit :

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

Cela me donne l'erreur suivante :

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

Comment puis-je définir un chemin relatif en java ? J'utilise jdk 1.6 et travaille sur Windows.

Author: Rishabh Agarwal, 2013-01-08

7 answers

Essayez quelque chose comme ça

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

Donc, votre nouveau fichier pointe vers le chemin où il est créé, généralement votre dossier personnel de projet.

[MODIFIER]

Comme @cmc l'a dit,

    String basePath = new File("").getAbsolutePath();
    System.out.println(basePath);

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

Les Deux donnent la même valeur.

 60
Author: VinayVeluri, 2016-11-05 09:58:45
 File f1 = new File("..\\..\\..\\config.properties");  

Ce chemin essayant d'accéder au fichier est dans le répertoire du projet, puis accédez simplement au fichier comme celui-ci.

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

Si votre fichier est dans OtherSources/Resources

this.getClass().getClassLoader().getResource("relative path");//-> relative path from resources folder
 3
Author: Abin M Devasia, 2013-01-08 06:21:36

Il convient de mentionner que dans certains cas

File myFolder = new File("directory"); 

Ne pointe pas vers les éléments racine. Par exemple, lorsque vous placez votre application sur C: drive (C:\myApp.jar), myFolder pointe vers (windows)

C:\Users\USERNAME\directory

Au Lieu de

C:\Directory
 2
Author: Danon, 2015-01-28 21:59:35

Tout d'abord, voir la différence entre le chemin absolu et le chemin relatif ici :

Un chemin absolu contient toujours l'élément racine et la liste complète des répertoires requis pour localiser le fichier.

Sinon, un chemin relatif doit être combiné avec un autre chemin pour accéder à un fichier.

Dans le fichier contructor (String pathname), la classe File de Javadoc disait que

Un nom de chemin, qu'il soit abstrait ou sous forme de chaîne, peut être absolu ou Relatif.

Si vous voulez obtenir un chemin relatif, vous devez être difine le chemin du répertoire de travail courant vers fle ou le répertoire.Essayez d'utiliser propriétés du système pour obtenir this.As les images que vous avez dessinées:

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

De plus, vous devriez essayer d'éviter d'utiliser similaire ".", "../", "/", et d'autres similaires par rapport au chemin relatif de l'emplacement du fichier, car lorsque les fichiers sont déplacés, il est plus difficile à gérer.

 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();
                }
            }
        }

    }

Vous pouvez également utiliser
Chemin path1 =Systèmes de fichiers.getDefault().getPath(Système d'.getProperty ("utilisateur.home"), "téléchargements", "unfichier.txt");

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

J'avais des problèmes pour attacher des captures d'écran à ExtentReports en utilisant un chemin relatif vers mon fichier image. Mon répertoire actuel lors de l'exécution est "C:\Eclipse 64-bit\eclipse \ workspace \ SeleniumPractic". Sous cela, j'ai créé le dossier ExtentReports pour les deux rapports.html et l'image.capture d'écran png comme ci-dessous.

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);

Cela crée le rapport et l'image dans le dossier ExtentReports, mais lorsque le rapport est ouvert et que l'image (vierge) est inspectée, le survol de l'image src affiche " Pourrait ne pas charger l'image" src=".\ ExtentReports \ QXKmoVZMW7.png".

Ceci est résolu en préfixant le chemin relatif et le nom de fichier de l'image avec la propriété système "user.dir". Cela fonctionne donc parfaitement et l'image apparaît dans le rapport 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

Exemple pour Spring Boot. Mon fichier WSDL se trouve dans les ressources du dossier "wsdl". Le chemin d'accès au fichier WSDL est:

Ressources/wsdl/WebServiceFile.wsdl

Pour obtenir le chemin d'une méthode vers ce fichier, vous pouvez effectuer les opérations suivantes:

String pathToWsdl = this.getClass().getClassLoader().
                    getResource("wsdl\\WebServiceFile.wsdl").toString();
 0
Author: Kirill Ch, 2018-02-14 15:24:52