2017-04-06 16 views
0

Javaプロジェクト内のフォルダにXMLファイルがあります。絶対パスを取得したいので、ファイルとしてロードできます。それを解析するために(DOM)。絶対パス/相対パスを使用する代わりに、ファイル名のみを指定し、その後に絶対パスを取得する必要があります。私はいくつかの異なる方法でこれをやろうとしましたが、私が得たパスには常にフォルダ名がありません。Java - プロジェクト内のファイルの正しい絶対パスを取得する方法

私が取得:

C:\Users\user\workspace\projectName\Input.xml<br> 

の代わり:

C:\Users\user\workspace\projectName\\**Folder1**\\Input.xml 

-

File input = new File(project.getFile("Input.xml").getLocation().toString());` 
File input = new File(project.getFile("Input.xml").getRawLocation().makeAbsolute().toString()); 
File input = new File(project.getFile("Input.xml").getLocationURI().getRawPath().toString()); 
File input = new File(project.getFile("Input.xml").getFullPath().toFile().getAbsolutePath()); 

をどのように私はFolder1ことを含んで正しいパスを得ることができますか?

+1

方法:このような方法を実行しますgetResourceAsStream-java.lang.String-)? – Axel

+0

getResourceAsStream() 'getResourceAsStream()'は、ファイルがクラスパスに含まれているリソースの場合にのみ動作します。これは大文字小文字ではありません – rrobby86

+0

フォルダを表す 'File'オブジェクト' dir'があれば、 'foo'それは 'new File(dir、" foo ")'であり、これをどのように適用するかは、 'project'オブジェクトが何であるかによっても異なります。 – rrobby86

答えて

0

あなたの質問を読んでください(あなたのプロジェクトはワークスペースディレクトリにあります)私はあなたがEclipseでプロジェクトを話していると思います。

あなたのアプリがEclipseに実行されるデフォルトのディレクトリは、プロジェクトの基本ディレクトリです。

はつまり、あなたのメインの中でこのような何かを実行する場合:

Files.newDirectoryStream(Paths.get(".")) 
    .forEach(path -> { 
     System.out.println(path); 
     System.out.println(path.toFile().getAbsolutePath()); 
    }); 

あなたは、プロジェクト内にあるすべてのファイルとディレクトリが表示されるはずです。だから、

何がしたいことは、プロジェクトの実行にだけ絶対パスの場合:

System.out.println(Paths.get(".").toFile().getAbsolutePath()); 

あなただけの名前を指定して、リソースInput.xmlを開きたい場合は、私はディレクトリにあなたが必要なすべてのファイルを移動することをお勧め[ `getResourceAsStream()`](https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html#の使用について

public static File getFileByName(String name, String path) throws IOException { 
    ArrayList<File> files = new ArrayList<>(); 
    Files.newDirectoryStream(Paths.get(path)) 
     .forEach(p -> { 
      if (p.getFileName() 
        .equals(name)) 
      files.add(p.toFile()); 
     }); 
    return files.size() > 0 ? files.get(0) : null; 
    } 
+0

それはプラグインのようなものになるだろうし、私は相対的なパスに依存したくない。私のメソッドは、探しているファイル名だけを受け取ります。それをする方法はありませんか? – ERX95

+0

あなたのファイルのディレクトリを検索しないのはなぜですか?私はちょうど私の答えを更新しました。 – freedev

関連する問題