实例化java.io.File以从类路径中读取资源

时间:2014-07-09 13:08:31

标签: java

假设我的项目结构如下:

+ src
---+ main
------+ java
------+ resources

如何定义能够从 resources 文件夹中读取xml的java.io.File实例?

2 个答案:

答案 0 :(得分:1)

这取决于您的程序的工作目录是什么。

您可以通过System.getProperty("user.dir");

在运行时获取工作目录

Here's a link with more info

完成后,创建一个指向资源文件夹的相对文件路径。

例如,如果您的工作目录是src,请创建一个相对文件路径,如下所示:

new File(Paths.get("main","resources").toString());

这种方法存在一些缺点,因为您使用的实际文件路径在部署应用程序时可能会发生变化,但它应该可以帮助您完成一些简单的开发。

答案 1 :(得分:0)

不,使用InputStream,路径从资源开始。

InputStream in = getClass().getResourceAsStrem("/.../...");

或网址

URL url = getClass().getResource("/.../...");

这样,如果应用程序打包在一个jar(区分大小写的名字!)中,它也可以。在这种情况下的URL是:

"jar:file://... .jar!/.../..."

如果您需要资源作为文件,例如要写入,则需要将资源作为初始模板复制到应用程序之外的某个目录,例如System.getProperty("user.home")

Path temp = Files.createTempFile("pref", "suffix.dat");
Files.copy(getClass().getResourceAsStream(...), temp, StandardCopyOption.REPLACE_EXISTING);
File file = temp.toFile();

正如@mjaggard评论的那样,createTempFile创建一个空文件, 所以Files.copy通常会失败,除非使用选项REPLACE_EXISTING。