文件对象和不同的NetBeans包

时间:2012-05-12 17:00:16

标签: java file netbeans file-io

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

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

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

图例:

  • 没有任何迹象 - 在NB的项目属性中添加了源包
  • [J]标准java包
  • [F] - 使用文件管理器生成的数据文件夹

问题是,我有自己的自定义布局加载器,因为我使用自己的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");

但那些当然也行不通。你能救我吗?

1 个答案:

答案 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");