【问题标题】:Eclipse loading file from different project来自不同项目的 Eclipse 加载文件
【发布时间】:2016-08-31 07:31:02
【问题描述】:

为了使开始新项目更容易,我已经将我经常使用的几个类“分解”到 eclipse 中的一个单独项目中。我称这个项目为一体机。它拥有我经常重用的各种抽象类和 OpenGL 相关方法。

(All-In-One 包含在构建路径中)

我遇到的问题是另一个项目,我将其称为测试项目。我在测试项目中创建了一个 SimpleShader 类的实例(引用 All-In-One ),但在运行时,它搜索 default.vert 并没有找到它(java.io.FileNotFoundException)

我猜这与不知道 shdr 文件夹及其内容的父项目有关;或者看到该类是在测试项目中“创建”的,它不会在 All-In-One 的 src 文件夹中查找。我已经尝试将一个文件夹链接到测试项目中的 shdr 文件夹,但没有任何改变。

All-In-One Project
    src/
        SimpleShader.java
        shdr/
            default.vert
            .... other files
Test Project
    src/
        Here would be the main file that creates an instance of 
        SimpleShader, which then looks for default.vert (but can't find it)

我用这个加载文件

String filename = "shdr/default.vert"; // It's actualy passed via a parameter, but this works.
FileInputStream in = new FileInputStream(filename); // Boom java.io.FileNotFoundException:

在为所有主要事物创建单独的项目之前,这工作得很好。我希望这只是一些我不知道或不理解的简单事情。

提前致谢。

【问题讨论】:

  • 你的构建路径是什么样的?为什么不将一体机用作具有适当版本控制的 jar 库?

标签: java eclipse filesystems project-management fileinputstream


【解决方案1】:

当您将项目放在构建路径上时,您无法直接从文件系统访问它们的文件。引用的项目将构建为 jar 文件,生成的 jar 将放在构建路径上。因此,您必须从类路径加载您正在查找的资源,例如 InputStream 流 = TestShader.class.getResourceAsStream("path/to/resouce");

有关更多信息,请参阅 Class.getResourceAsStream() 的 Api-Doc。

【讨论】:

    【解决方案2】:

    根据 Guenther 所说,我已经尝试过,但没有成功。我确实受到了启发,并发现这很有效。

    String filename = SimpleShader.class.getProtectionDomain().getCodeSource().getLocation().toExternalForm().substring(5)+filename;
    

    输出类似于

    /workspace/All-In-One/bin/shdr/default.vert
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-26
      • 1970-01-01
      • 1970-01-01
      • 2011-02-21
      • 1970-01-01
      相关资源
      最近更新 更多