paths java path relative jdk1.6

paths - Cómo definir una ruta relativa en Java



paths get java (7)

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

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.


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

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.


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


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.


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


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


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