这是我项目的结构:
我需要阅读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上工作。
答案 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();