如何在java中定义相对路径

问题描述 投票:0回答:9

这是我项目的结构:

here is the structure of my project

我需要阅读

config.properties
里面的
MyClass.java
。 我尝试使用如下相对路径这样做:

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

这给了我以下错误:

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

如何在 Java 中定义相对路径?我正在使用 jdk 1.6 并在 Windows 上工作。

java relative-path java-6
9个回答
93
投票

试试这样的东西

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

所以你的新文件指向创建它的路径,通常是你的项目主文件夹。

正如@cmc所说,

    String basePath = new File("").getAbsolutePath();
    System.out.println(basePath);

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

两者给出相同的值。


7
投票

首先看看绝对路径和相对路径的区别这里

绝对路径总是包含根元素和定位文件所需的完整目录列表。

或者,相对路径需要与另一个路径组合才能访问文件。

在构造函数 File(String pathname) 中,Javadoc 的 File 类表示

路径名,无论是抽象的还是字符串形式,都可以是绝对的或相对的。

如果你想获取相对路径,你必须定义从当前工作目录到文件或目录的路径。尝试使用系统属性来获取它。如你绘制的图片:

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

另外,相对于文件位置相对路径应尽量避免使用类似“.”、“../”、“/”等类似符号,因为移动文件时比较难处理。


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

这个试图访问文件的路径在项目目录中,然后像这样访问文件。

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

如果您的文件在

OtherSources/Resources

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

2
投票

值得一提的是,在某些情况下

File myFolder = new File("directory"); 

不指向根元素。例如,当您将应用程序放在

C:
驱动器 (
C:\myApp.jar
) 上时,
myFolder
指向 (windows)

C:\Users\USERNAME\directory

代替

C:\Directory

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

    }

你也可以使用
Path path1 =FileSystems.getDefault().getPath(System.getProperty("user.home"), "downloads", "somefile.txt");


1
投票

我在使用图像文件的相对路径将屏幕截图附加到 ExtentReports 时遇到问题。我执行时的当前目录是“C:\Eclipse 64-bit clipse\workspace\SeleniumPractic”。在此之下,我为 report.html 和 image.png 截图创建了文件夹 ExtentReports,如下所示。

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

这会在 ExtentReports 文件夹中创建报告和图像,但是当打开报告并检查(空白)图像时,将鼠标悬停在图像 src 上会显示“无法加载图像”src=".\ExtentReports\QXKmoVZMW7.png" .

这通过在图像的相对路径和文件名前加上系统属性“user.dir”来解决。所以这很完美,图像出现在 html 报告中。

克里斯

String imgFilename = GenericMethods.takeScreenShot(driver,System.getProperty("user.dir") + "\\" + outputFolder);
String imagePath = test.addScreenCapture(imgFilename);
test.log(LogStatus.FAIL, "Added image to report", imagePath);

1
投票

Spring Boot 的例子。我的 WSDL 文件位于“wsdl”文件夹中的资源中。 WSDL 文件的路径是:

资源/wsdl/WebServiceFile.wsdl

要获取从某个方法到此文件的路径,您可以执行以下操作:

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

0
投票

自 Java 7 以来,您有

Path.relativize()

"... a Path 还定义了 resolve 和 resolveSibling 方法来组合路径。可用于在两个路径之间构造相对路径的 relativize 方法。"


-1
投票

如果文件,根据你的图表,在你的

src
文件夹之上2级,你应该使用以下相对路径:

../../config.properties

请注意,在相对路径中,我们使用正斜杠

/
而不是反斜杠
\
.

© www.soinside.com 2019 - 2024. All rights reserved.