使用 ClassLoader 加载资源
Resource loading using ClassLoader
我有一个资源文件需要在运行时加载...它在 src/main/resources
我已经使用 :
成功地将文件加载到 inputStream
LoadSAC.class.getClassLoader().getResourceAsStream("someFile.txt");
LoadSAC
是 class 名字 ...
但是,PMD 抱怨这建议我使用
Thread.currentThread().getContextClassLoader().getResource(...)
我尝试了多种组合,但始终无法找到文件...任何想法...我已经进行了多次搜索并提供了大量建议,但 none 似乎有效...
有什么想法吗?
如果 someFile.txt
与 LoadSAC.java
在同一个文件夹中,您可以:
InputStream is = LoadSAC.class.getResourceAsStream("someFile.txt");
如果 someFile.txt
在子文件夹 subdir
中,您可以:
InputStream is = LoadSAC.class.getResourceAsStream("subdir/someFile.txt");
如果您在 LoadSAC.java
中的方法是非静态的,您可以将 LoadSAC.class.getResourceAsStream...
替换为 getClass().getResourceAsStream...
使用ant
或maven
进行编译时要小心,默认情况下,只有.java
个文件被复制为构建目录中的.class
个文件。
您必须编写一些规则以在最后的 jar
中包含 someFile.txt
。
在您的 resource
目录中,您可以像这样添加一个小助手 class:
import java.io.InputStream;
import java.net.URL;
import javax.activation.DataSource;
import javax.activation.URLDataSource;
public abstract class ResourceHelper {
public static URL getURL(String name) {
return ResourceHelper.class.getResource(name);
}
public static InputStream getInputStream(String name) {
return ResourceHelper.class.getResourceAsStream(name);
}
public static DataSource getDataSource(String name) {
return new URLDataSource(getURL(name));
}
}
在LoadSAC.java
中调用:
InputStream is = ResourceHelper.getInputStream("someFile.txt");
我有一个资源文件需要在运行时加载...它在 src/main/resources
我已经使用 :
成功地将文件加载到 inputStreamLoadSAC.class.getClassLoader().getResourceAsStream("someFile.txt");
LoadSAC
是 class 名字 ...
但是,PMD 抱怨这建议我使用
Thread.currentThread().getContextClassLoader().getResource(...)
我尝试了多种组合,但始终无法找到文件...任何想法...我已经进行了多次搜索并提供了大量建议,但 none 似乎有效...
有什么想法吗?
如果 someFile.txt
与 LoadSAC.java
在同一个文件夹中,您可以:
InputStream is = LoadSAC.class.getResourceAsStream("someFile.txt");
如果 someFile.txt
在子文件夹 subdir
中,您可以:
InputStream is = LoadSAC.class.getResourceAsStream("subdir/someFile.txt");
如果您在 LoadSAC.java
中的方法是非静态的,您可以将 LoadSAC.class.getResourceAsStream...
替换为 getClass().getResourceAsStream...
使用ant
或maven
进行编译时要小心,默认情况下,只有.java
个文件被复制为构建目录中的.class
个文件。
您必须编写一些规则以在最后的 jar
中包含 someFile.txt
。
在您的 resource
目录中,您可以像这样添加一个小助手 class:
import java.io.InputStream;
import java.net.URL;
import javax.activation.DataSource;
import javax.activation.URLDataSource;
public abstract class ResourceHelper {
public static URL getURL(String name) {
return ResourceHelper.class.getResource(name);
}
public static InputStream getInputStream(String name) {
return ResourceHelper.class.getResourceAsStream(name);
}
public static DataSource getDataSource(String name) {
return new URLDataSource(getURL(name));
}
}
在LoadSAC.java
中调用:
InputStream is = ResourceHelper.getInputStream("someFile.txt");