【问题标题】:Filepath for reading file in library code用于在库代码中读取文件的文件路径
【发布时间】:2020-10-22 18:07:23
【问题描述】:

我需要将一个 glsl 源文件读入我的程序。

我正在编写一个库,并将我的测试代码放在 Eclipse 的一个单独项目中。

在测试项目的构建路径中,我设置了“构建路径上的必需项目”以包含我正在编写的库。

问题是当我运行我的测试项目时,它会寻找“src/example/vertexShader.glsl”。 Java 尝试从测试项目的 src 文件夹中读取它,而不是从库项目中读取。

我已将文件复制到测试项目并运行它,它工作正常,所以我知道它在错误的项目中寻找文件。

我正在使用以下代码创建一个阅读器来阅读文本:

BufferedReader reader = new BufferedReader(new FileReader(file));

即使我通过不同的项目运行代码,我如何才能让它专门从我的库项目中读取?

【问题讨论】:

  • "并将我的测试代码放在 Eclipse 的单独项目中" - 我希望您的代码和单元测试在同一个项目中,src/main/java 下的代码和src/test/java 下的单元测试.为什么他们在不同的项目中?
  • 因为我的想法是我将单独打包库,所以我正在编写一个单独的项目来模拟该用例
  • 这也不能解决我的问题,因为当库完成并打包为 jar 时,无论如何都会有一个单独的项目引用它,所以这个问题会再次出现
  • 你使用的是 Maven 还是类似的?
  • 我没有使用类似的东西。我只是在使用 Java 和 Eclipse。我在项目的构建配置中配置了 LWJGL 和 SlickUtil jar。我将使用 Eclipse 的内置导出功能构建最终的库 jar

标签: java eclipse file-io lwjgl bufferedreader


【解决方案1】:

从测试项目的角度来看,Eclipse 将我的 Library 项目视为已经打包到 Jar 中的项目。 因此,要从项目内部加载资源,从测试项目的角度来看,它看起来像 Jar 文件内部,我需要使用 getResourceAsStream 而不是使用 File 对象的 BufferedReader,因为我的 glsl 源文件将不再是一份文件”。 要解决这个问题,我必须将之前的 BufferedReader 代码更改为:

InputStream in = Class.class.getResourceAsStream(file);
BufferedReader reader = new BufferedReader(new InputStreamReader(in));

这解决了问题并允许我从库项目内部加载资源。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-25
    相关资源
    最近更新 更多