繁体   English   中英

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

[英]Instancing a java.io.File to read a resource from classpath

假设我的项目结构如下:

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

如何定义一个能够从资源文件夹读取xml的java.io.File实例?

这取决于程序的工作目录。

您可以在运行时通过System.getProperty("user.dir");获得工作目录System.getProperty("user.dir");

这是更多信息的链接

一旦知道了,创建一个指向您的资源文件夹的相对文件路径。

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

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

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

不,使用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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM