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