java - 如何从java中的资源文件夹中读取文件?
问题描述
你好:我在网上没有找到任何有用的东西,所以我问这个问题。如何从资源文件夹中读取文件?我有一个源文件夹 (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)
提前致谢!
解决方案
不要使用File
API 来获取资源文件,因为它可能会在 IDE 开发期间工作(因为所有编译的文件都放在磁盘上)并且在构建和部署 JAR 后将无法工作(因为本机文件系统无法访问 JAR 内容)
直接获取资源流,而不是获取文件。无论如何,使用文件 API,您必须FileInputStream
在某个时候获得。所以要让它在任何地方都可以使用
InputStream in = Main.class.getClassLoader().getResourceAsStream("shader.glsl");
在这种情况下,shader.glsl
必须存在于resource
文件夹中(如果您使用的是 maven)或更准确和通用,它必须编译到 JAR 文件的根目录中。如果它嵌套在 JAR 中,您将不得不使用它/path/to/resource/shader.glsl
来获取该资源
推荐阅读
- java - 捕获异常后如何在 for 循环中不增加?
- c# - Dotnet Core 2 上的 Windows 身份验证 Active Directory 登录对话框
- spring - Java 邮件客户端无法从 Docker 容器访问 SMTP 服务器
- sql - SQL:连接 3 个表并在子查询中显示 2 个表中的所有数据
- php - PHP 处理包含随机数量项目的清单
- python-3.x - Python KeyError:'列名'
- javascript - 我的 Google App 脚本项目需要独占 IP 地址
- sql - 总结模型中的所有属性?
- ios - 如何使用 PromiseKit 6.3 返回 Promise
- sql - 使用 SQL 在 XML 中插入节点