假设我的项目结构如下:
+ src
---+ main
------+ java
------+ resources
如何定义能够从 resources 文件夹中读取xml的java.io.File
实例?
答案 0 :(得分:1)
这取决于您的程序的工作目录是什么。
您可以通过System.getProperty("user.dir");
完成后,创建一个指向资源文件夹的相对文件路径。
例如,如果您的工作目录是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。