Cómo definir una ruta relativa en Java (Windows)

Aquí está la estructura de mi proyecto:

aquí está la estructura de mi proyecto

Necesito leer config.properties dentro de MyClass.java . Intenté hacerlo con una ruta relativa de la siguiente manera:

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

Esto me da el siguiente error:

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

¿Cómo puedo definir una ruta relativa en Java? Estoy usando jdk 1.6 y trabajando en Windows.

Pruebe algo como esto

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

Por lo tanto, su nuevo archivo apunta a la ruta donde se creó, generalmente la carpeta de inicio del proyecto.

[EDITAR]

Como dijo @cmc,

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

Ambos dan el mismo valor.

  File f1 = new File("..\\..\\..\\config.properties"); 

esta ruta de acceso para acceder al archivo está en el directorio del Proyecto y solo tiene que acceder a un archivo como este.

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

si su archivo está en OtherSources/Resources

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

Vale la pena mencionar que en algunos casos

 File myFolder = new File("directory"); 

no apunta a los elementos raíz Por ejemplo, cuando coloca su aplicación en C: unidad ( C:\myApp.jar ), entonces myFolder apunta a (ventanas)

 C:\Users\USERNAME\directory 

en lugar de

 C:\Directory 

En primer lugar, vea la diferencia entre la ruta absoluta y la ruta relativa aquí :

Una ruta absoluta siempre contiene el elemento raíz y la lista completa de directorios necesarios para ubicar el archivo.

Alternativamente, una ruta relativa necesita combinarse con otra ruta para acceder a un archivo.

En el archivo contructor (String pathname), la clase de archivos de Javadoc decía que

Un nombre de ruta, ya sea abstracto o en forma de cadena, puede ser absoluto o relativo.

Si desea obtener una ruta relativa, debe determinar la ruta desde el directorio de trabajo actual a archivo o directorio. Intente utilizar las propiedades del sistema para obtener esto. Como las imágenes que dibujó:

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

Además, debe intentar evitar el uso de “.”, “../”, “/”, y otros similares en relación con la ruta relativa de ubicación del archivo, porque cuando se mueven los archivos, es más difícil de manejar.

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

También puedes usar
Ruta path1 = FileSystems.getDefault (). GetPath (System.getProperty (“user.home”), “descargas”, “somefile.txt”);

Estaba teniendo problemas para adjuntar capturas de pantalla a ExtentReports usando una ruta relativa a mi archivo de imagen. Mi directorio actual al ejecutar es “C: \ Eclipse 64-bit \ eclipse \ workspace \ SeleniumPractic”. Debajo de esto, creé la carpeta ExtentReports para la captura de pantalla de report.html y de image.png como se muestra a continuación.

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

Esto crea el informe y la imagen en la carpeta ExtentReports, pero cuando se abre el informe y se inspecciona la imagen (en blanco), al pasar el ratón sobre la imagen se muestra “No se pudo cargar la imagen” src = “. \ ExtentReports \ QXKmoVZMW7.png”.

Esto se resuelve prefijando la ruta y el nombre de archivo relativos para la imagen con la propiedad del sistema “user.dir”. Entonces esto funciona perfectamente y la imagen aparece en el informe 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); 

Ejemplo para Spring Boot. Mi archivo WSDL está en Recursos en la carpeta “wsdl”. La ruta al archivo WSDL es:

recursos / wsdl / WebServiceFile.wsdl

Para obtener la ruta desde algún método hasta este archivo, puede hacer lo siguiente:

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