我在网上找不到任何有用的东西,所以我提了一个问题。如何从资源文件夹读取文件?我有一个源文件夹(src)和一个资源文件夹(res)。两者都在Java中指定为源文件夹。我尝试使用:new File(Main.class.getClassLoader().getResource("shader.glsl").getFile());
但是没有用。请不要太严格,只问我是否忘了提些什么。提前致谢。
编辑:这些是我得到的错误:
java.io.FileNotFoundException: shader.glsl (Das System kann die angegebene Datei nicht finden)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at java.io.FileReader.<init>(Unknown Source)
at com.leocat.game.shader.ShaderProgram.loadShader(ShaderProgram.java:54)
at com.leocat.game.shader.ShaderProgram.init(ShaderProgram.java:18)
at com.leocat.game.shader.StaticShader.init(StaticShader.java:8)
at com.leocat.game.states.GameState.init(GameState.java:29)
at com.leocat.game.Game.init(Game.java:91)
at com.leocat.game.Game.updateGLFW(Game.java:60)
at com.leocat.game.Game.run(Game.java:132)
at java.lang.Thread.run(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
不要使用FileAPI来获取资源文件,因为它可能会在IDE开发过程中起作用(因为所有已编译的文件都放在了磁盘上),并且在JAR的构建和部署后将无法工作(因为JAR内容不可用于本机文件系统)
直接获取资源流而不是获取文件。有了文件API,您还是必须要FileInputStream在某个时候完成。因此,使其在任何地方都可以使用
InputStream in = Main.class.getClassLoader().getResourceAsStream("shader.glsl");
Run Code Online (Sandbox Code Playgroud)
在这种情况下,shader.glsl必须存在于resource文件夹中(如果使用的是maven),或者为了更精确和通用起见,必须将其编译到JAR文件的根目录中。如果嵌套在JAR中,则必须使用它/path/to/resource/shader.glsl来获取该资源