web-dev-qa-db-ja.com

javaで相対パスを定義する方法

これが私のプロジェクトの構造です:

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で作業しています。

35
ishk

このようなものを試してください

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

両方とも同じ値を与えます。

69
VinayVeluri

まず、絶対パスと相対パスの違いを確認してください here

絶対パスには、常にルート要素と、ファイルの検索に必要な完全なディレクトリリストが含まれます。

または、ファイルにアクセスするには、相対パスを別のパスと組み合わせる必要があります。

コンストラクターFile(String pathname)で、JavadocのFileクラスは、

パス名は、抽象形式でも文字列形式でも、絶対パスでも相対パスでもかまいません。

相対パスを取得したい場合は、現在の作業ディレクトリからファイルまたはディレクトリへのパスを定義する必要があります。 システムプロパティ を使用してこれを取得してください。

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

さらに、ファイルが移動されると処理が難しくなるため、同様の「。」、「../」、「/」、およびファイルの場所の相対パスに関連する他の類似の使用を避けるようにしてください。

2
hoapham
 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
1
Danon
 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");

0
yahitesh

画像ファイルへの相対パスを使用して、スクリーンショットを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);
0
Chris Liston

Spring Bootの例。私のWSDLファイルは「wsdl」フォルダーのリソースにあります。 WSDLファイルへのパスは次のとおりです。

resources/wsdl/WebServiceFile.wsdl

何らかのメソッドからこのファイルへのパスを取得するには、次を実行できます。

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