web-dev-qa-db-fra.com

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

Voici la structure de mon projet:

here is the structure of my project

Je dois 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 définir un chemin relatif en Java? J'utilise jdk 1.6 et travaille sous windows.

32
ishk

Essayez quelque chose comme ça

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

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

[MODIFIER]

Comme @cmc 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.

63
VinayVeluri
 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 ceci.

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

si votre fichier est en OtherSources/Resources

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

Il est à noter que dans certains cas 

File myFolder = new File("directory"); 

ne pointe pas vers les éléments racines. Par exemple, lorsque vous placez votre application sur le lecteur C: (C:\myApp.jar), myFolder pointe sur (windows).

C:\Users\USERNAME\directory

au lieu de

C:\Directory
2
Danon

Tout d’abord, voyez la différence entre chemin absolu et chemin relatif ici :

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

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

Dans le fichier constructeur (String chemin), la classe File de Javadoc a déclaré que 

Un chemin d'accès, qu'il soit abstrait ou sous forme de chaîne, peut être absolu ou relatif.

Si vous voulez obtenir un chemin relatif, vous devez définir le chemin du répertoire de travail en cours à fle ou répertoire. Essayez d'utiliser propriétés système pour obtenir ceci. Comme 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 des ".", "../", "/" et autres similaires similaires au chemin relatif d'emplacement de fichier, car lorsque les fichiers sont déplacés, il est plus difficile à gérer. 

1
hoapham
 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 aussi utiliser
Path path1 = FileSystems.getDefault (). GetPath (System.getProperty ("user.home"), "downloads", "un fichier.

0
yahitesh

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 bits\Eclipse\workspace\SeleniumPractic". Sous cela, j'ai créé le dossier ExtentReports pour les captures d'écran report.html et image.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, survolez l'image src affiche "Impossible de 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". Donc, cela fonctionne 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
Chris Liston

Exemple pour Spring Boot. Mon fichier WSDL est dans les ressources dans le 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 procéder comme suit:

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