我喜欢将我的应用程序数据和代码保存在NB中的不同源包中(不要误解java包)。
所以我这次做了。不幸的是,它无法通过File对象从一个包到另一个包获取文件。这是我的包结构
Source Packages
|-[J]basicstuff
|-[J]net.abc.utils
assets
|-[F]Images
|-[F]Layouts
图例:
问题是,我有自己的自定义布局加载器,因为我使用自己的GUI系统。布局是放置在资产/布局中的JSON文本文件。不幸的是我的layoutmanager(net.abc.utils中的另一个类)无法加载它们。无论我做什么,我都无法加载。
我试过
File layout = new File("assets/Layouts/layout.txt");
然后
File layout = new File("../../../assets/Layouts/layout.txt");
然后我记得上面有四个目录,包括src dir。
File layout = new File("../../../../assets/Layouts/layout.txt");
但它也没有用。
甚至尝试过
File layout = new File("../../../../Layouts/layout.txt");
和
File layout = new File("../../../Layouts/layout.txt");
但那些当然也行不通。你能救我吗?
答案 0 :(得分:1)
取决于您的应用程序所在的环境(独立, ApplicationServer ),您需要使用相应的< / strong> ClassLoader
。
尝试这样的事情:
private static InputStream getResourceAsStream(String resource) throws FileNotFoundException {
String stripped = resource.startsWith("/") ? resource.substring(1) : resource;
InputStream stream = null;
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
if (classLoader != null) {
stream = classLoader.getResourceAsStream(stripped);
}
if (stream == null) {
stream = MyClass.class.getResourceAsStream(resource);
}
if (stream == null) {
stream = MyClass.class.getClassLoader().getResourceAsStream(stripped);
}
if (stream == null) {
throw new FileNotFoundException("Resource not found: " + resource);
}
return stream;
}
使用:
MyClass.getResourceAsStream("Layouts/layout.txt");