0

我喜欢将我的应用程序数据和代码保存在 NB 的不同源包中(不要误认为 java 包)。

所以我这次做了。不幸的是,它无法通过 File 对象从一个包到另一个包获取文件。这是我的包结构

Source Packages
    |-[J]basicstuff
    |-[J]net.abc.utils
  assets
    |-[F]Images
    |-[F]Layouts

传奇:

  • 无指示 - 在 NB 的项目属性中添加了源包
  • [J] 标准java包
  • [F] - 使用文件管理器制作的数据文件夹

问题是,当我使用自己的 GUI 系统时,我有我的自定义布局加载器。布局是放置在 assets/Layouts 中的 JSON 文本文件。不幸的是,我的布局管理器(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");

但是那些当然也没有用。你能帮助我吗?

4

1 回答 1

1

根据您的应用程序所在的环境独立应用服务器),您将需要使用适当 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");
于 2012-05-12T17:25:00.660 回答