Voici la structure de mon projet:
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.
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.
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
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
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.
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.
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);
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();