如何在java中定义相对路径(Windows)

时间:2013-01-08 06:01:27

标签: java path relative jdk1.6

这是我项目的结构:

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上工作。

7 个答案:

答案 0 :(得分:67)

尝试这样的事情

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

两者都给出了相同的价值。

答案 1 :(得分:3)

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

尝试访问文件的路径位于Project目录中,然后只访问这样的文件。

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

如果您的文件位于OtherSources/Resources

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

答案 2 :(得分:2)

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

File myFolder = new File("directory"); 

并不指向根元素。例如,当您将应用程序放在C:驱动器(C:\myApp.jar)上时,myFolder指向(窗口)

C:\Users\USERNAME\directory

而不是

C:\Directory

答案 3 :(得分:1)

首先,查看绝对路径和相对路径here之间的差异:

绝对路径始终包含查找文件所需的根元素和完整目录列表。

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

在contructor File(String pathname)中,Javadoc的File类表示

  

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

如果你想获得相对路径,你必须将当前工作目录的路径改为fle或目录。尝试使用system properties得到这个。作为你绘制的图片:

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

此外,您应该尽量避免使用类似的“。”,“../”,“/”和其他类似的文件位置相对路径,因为当文件移动时,它更难处理。

答案 4 :(得分:0)

<record id="view_production_lot_form" model="ir.ui.view">
    <field name="name">Stock Production Lot Form</field>
    <field name="model">stock.production.lot</field>
    <field name="inherit_id" ref="stock.view_production_lot_form"/>
    <field name="arch" type="xml">
        <page string="Products" position="after">
            <page string="Additional Fields">
                <field name="lot_lot_additional_fields" widget="one2many_list" context="{'default_stock_production_lot': active_id}">
                    <tree editable="bottom">
                        <field name="stock_production_lot" invisible="1"/>
                        <field name="lot_additional_fields"/>
                        <field name="value"/>
                    </tree>
                </field>
                <h3>General remarks</h3>
                <field name="remarks"/>
            </page>
        </page>
    </field>
</record>

您也可以使用
路径path1 = FileSystems.getDefault()。getPath(System.getProperty(“user.home”),“downloads”,“somefile.txt”);

答案 5 :(得分:0)

我在使用映像文件的相对路径将屏幕截图附加到ExtentReports时遇到问题。执行时我的当前目录是&#34; C:\ Eclipse 64-bit \ eclipse \ workspace \ SeleniumPractic&#34;。在此下,我为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上会显示&#34;无法加载图像&#34; SRC =&#34; \ ExtentReports \ QXKmoVZMW7.png&#34;

这是通过使用System Property&#34; user.dir&#34;为图像的相对路径和文件名添加前缀来解决的。所以这很好用,图像出现在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);

答案 6 :(得分:0)

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

  

资源/ WSDL / WebServiceFile.wsdl

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

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