Java 如何引用保存在类路径下的文件?

Java 如何引用保存在类路径下的文件?,java,Java,在我们的应用程序中,我们在注册期间发送电子邮件。 为此,我们在/usr/local/email.html下存储了一个电子邮件模板 StringWriter writer = new StringWriter(); IOUtils.copy(new FileInputStream(new File("/usr/local/email.html")),writer); message.setContent(writer.toString(), "text/html"); Transport.send

在我们的应用程序中,我们在注册期间发送电子邮件。
为此,我们在/usr/local/email.html下存储了一个电子邮件模板

StringWriter writer = new StringWriter();
IOUtils.copy(new FileInputStream(new File("/usr/local/email.html")),writer);
message.setContent(writer.toString(), "text/html");
Transport.send(message);
以上操作正常。

我们不想硬编码这个路径(/usr/local/email.html),我们想保存在classpath下

如果我把它放在classpath下,我怎么能读呢

StringWriter writer = new StringWriter();
ClassLoader loader = Thread.currentThread().getContextClassLoader();
InputStream is = loader.getResourceAsStream("email.html");
IOUtils.copy(is,writer);
message.setContent(writer.toString(), "text/html");
Transport.send(message);
通过上面的代码,我在

IOUtils.copy(is,writer);
如果使用具有相对路径的getClass().getResourceAsStream,则如果资源与类位于同一个包中,则会找到该资源

或者,您可以使用绝对名称,如“/some/package/email.html”

为什么不使用

this.getClass().getClassLoader().getResourceAsStream("email.html");

您的资源位于类路径上一个固定的已知位置,因此最好使用。在
对象上调用它,它会自动使用类的
类加载器
,并在类的包中查找资源

例如,如果您有一个名为
com.example.myapp.Emailer的类,并且您编写:

InputStream is = Emailer.class.getResourceAsStream("email.html");
它将通过用于加载
Emailer
类的同一类加载器来查找
com/example/myapp/email.html
。您应该将
email.html
放入JAR中,与编译的
Emailer.class
文件位于同一位置


我特别建议不要为此使用
Thread.currentThread().getContextClassLoader()
,因为结果可能因线程而异,并且可能是类加载器无法访问保存资源的JAR文件。您希望确保始终使用实际加载应用程序类的类加载器,并通过在应用程序的一个类的
Class
对象上调用
getResourceAsStream
来实现这一点。

它是否在根级别的类路径中?抱歉,但不能在静态上下文中使用它