2013-06-27 118 views
42

假设标准的maven设置。如何在项目的/ resources文件夹中获取文件的绝对路径

说你的资源文件夹中有一个文件abc

在Java中,我该如何获得文件的绝对路径?

+0

你想编写一个Maven插件吗?或者当你的程序执行时你想访问文件吗? –

+0

相关:http://stackoverflow.com/questions/8136891/getting-absolute-path-of-a-file-loaded-via-classpath – Vadzim

回答

14

您可以创建一个File对象,并使用getAbsolutePath方法:

File file = new File("resources/abc.txt"); 
String absolutePath = file.getAbsolutePath(); 
+5

有限使用的建议,因为它依赖工作目录作为maven根。即使如此,您应该使用'target/classes/abc.txt'来引用该文件,因为这是Maven在处理后放置资源文件的规范地方(例如,maven-resources插件可能已经完成了属性替换的abc.txt)。通过类路径中的getResource()使用abc.txt会更好。 –

+1

如果最终用户将您的应用程序作为可执行JAR运行,该怎么办?那么根本就不会有物理文件。这是您应该使用getResource()的另一个原因,例如打开它的输入流取决于你想用它做什么。 –

+4

这可以作为正确答案被删除吗? @Karol S在下面回答 - 这应该是正确的答案(因此upvote差异) – DanGordon

104

,实际工作的正确方法:

URL resource = YourClass.class.getResource("abc"); 
Paths.get(resource.toURI()).toFile(); 

不要紧,现在在哪里在classpath中文件是物理只要资源实际上是文件而不是JAR条目,就会发现它。

(看似明显new File(resource.getPath())并不适用于所有的路径工作!路径仍然是URL编码!)

+3

或者大概你可以这样做:'new File(resource.toURI())。getAbsolutePath();'(即我不认为你需要Path对象?) –

+1

好的提示关于toURI(),这样可以避免你的路径中的空格以%20的形式出现! –

+17

谢谢!这几乎为我工作。但我不得不作出一个更改:YourClass.class.getClassLoader()。getResource(“abc”); – yngwietiger

11

您必须specifie路径从/

URL resource = YourClass.class.getResource("/abc"); 
Paths.get(resource.toURI()).toFile(); 
5

开始创建的类加载器实例您需要的课程,然后您可以轻松访问文件或资源。 现在您使用该类的getPath()方法访问路径。

ClassLoader classLoader = getClass().getClassLoader(); 
String path = classLoader.getResource("chromedriver.exe").getPath(); 
System.out.println(path); 
相关问题