これが私のプロジェクトの構造です:
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で作業しています。
このようなものを試してください
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);
両方とも同じ値を与えます。
まず、絶対パスと相対パスの違いを確認してください here :
絶対パスには、常にルート要素と、ファイルの検索に必要な完全なディレクトリリストが含まれます。
または、ファイルにアクセスするには、相対パスを別のパスと組み合わせる必要があります。
コンストラクターFile(String pathname)で、JavadocのFileクラスは、
パス名は、抽象形式でも文字列形式でも、絶対パスでも相対パスでもかまいません。
相対パスを取得したい場合は、現在の作業ディレクトリからファイルまたはディレクトリへのパスを定義する必要があります。 システムプロパティ を使用してこれを取得してください。
String localDir = System.getProperty("user.dir");
File file = new File(localDir + "\\config.properties");
さらに、ファイルが移動されると処理が難しくなるため、同様の「。」、「../」、「/」、およびファイルの場所の相対パスに関連する他の類似の使用を避けるようにしてください。
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
言及する価値がある場合もあります
File myFolder = new File("directory");
ルート要素を指していません。たとえば、アプリケーションをC:
ドライブ(C:\myApp.jar
)に配置し、myFolder
が(windows)を指す場合
C:\Users\USERNAME\directory
の代わりに
C:\Directory
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");
画像ファイルへの相対パスを使用して、スクリーンショットをExtentReportsに添付する際に問題が発生していました。実行時の現在のディレクトリは「C:\ Eclipse 64-bit\Eclipse\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にカーソルを合わせると「Could not load image」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);
Spring Bootの例。私のWSDLファイルは「wsdl」フォルダーのリソースにあります。 WSDLファイルへのパスは次のとおりです。
resources/wsdl/WebServiceFile.wsdl
何らかのメソッドからこのファイルへのパスを取得するには、次を実行できます。
String pathToWsdl = this.getClass().getClassLoader().
getResource("wsdl\\WebServiceFile.wsdl").toString();