Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 文件对象和不同的NetBeans包_Java_File_Netbeans_File Io - Fatal编程技术网

Java 文件对象和不同的NetBeans包

Java 文件对象和不同的NetBeans包,java,file,netbeans,file-io,Java,File,Netbeans,File Io,我喜欢将我的应用程序数据和代码保存在NB中的不同源代码包中(不要与java包混淆) 所以这次我做到了。不幸的是,它无法通过文件对象从一个包到另一个包获取文件。这是我的包结构 Source Packages |-[J]basicstuff |-[J]net.abc.utils assets |-[F]Images |-[F]Layouts 图例: 无说明-NB的项目属性中添加了源包 [J] 标准java包 [F] -使用文件管理器创建的数据文件夹 问题是,

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

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

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");
然后

然后我记得上面有四个目录,包括src dir

File layout = new File("../../../../assets/Layouts/layout.txt");
但它也不起作用

甚至试过

File layout = new File("../../../../Layouts/layout.txt");

但这些当然也不起作用。您能帮助我吗?

根据您的应用程序所在的环境(单机版,ApplicationServer),您需要使用合适的
类加载器

试着这样做:

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

你应该回到你以前的问题,接受最好的答案,这样人们会更愿意回答你。嗯,我的应用程序是独立的。另外,主类位于basicstuff包中,而layoutmanager类位于net.abc.utils中。同时,资源也加载在net.abc.utils.layoutmanager.java中,并通过layoutmanager实例传递给主函数。MyClass代表什么?
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");