java - 如何读取不同包中的资源文件?

标签 java json jsp servlets

我正在尝试从“UserList.java”类中读取“User.json”文件,但我不能。我正在 JSP/Servlet 中进行开发,我不喜欢在服务器文件夹 (TOMCAT) 的上下文中阅读。

我尝试一下:

//User.java

Gson gsonObject = new Gson();
String res = gsonObject.toJson(new FileReader("User.json"));

System.out.println("User ==> JSON  " + res);

结果:

java.io.FileNotFoundException: User.json

Json 文件:

//User.json

{
    "user": {
        "type": "text"
        },
    "name": {
        "type": "text"
        },
    "password": {
        "type": "password"
    },
    "characterName": { 
        "type": "combo",
        "id": "rolls"
    }
}

套餐如下:

br.com.servtech.servlet.list ==> UserList.java
br.com.servtech.model.json ==> User.json

最佳答案

FileReader 构造函数采用文件名称作为参数。您向它传递一个相对文件名,因此 Java 会在文件系统的当前目录中查找它,该目录是启动用于启动 Tomcat 的 java 命令的目录。

不仅路径不正确,而且您甚至不想使用文件,因为您想要读取的是资源,它位于war 文件,甚至在 war 文件内的 jar 文件内。

由于类加载器,您希望使用此资源,因为必须使用与 .class 文件相同的加载机制(基于 war、jar 和包)找到此资源。因此你应该使用

InputStream in = UserList.class.getResourceAsStream("/br/com/servtech/model/json/User.json");

关于java - 如何读取不同包中的资源文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21067484/

相关文章:

java - 读取从 PHP 回显的字符串到 java 中?

json - row_to_json 上的时间戳格式

java - 即使在删除工作目录后,Tomcat 也会重新编译旧版本的 JSP

c# - 从 BsonDocument 反序列化为字符串并序列化回 BsonDocument

java - JSTL forEach 标签不遍历集合

java - 填充 Filter 类中的 JSP 下拉列表

Java = 下载缓冲区未填满?冲洗/缓冲如何工作?

java - 重新定义派生类中的静态成员。 java

java - 无法编译 JSP 类错误?

java - 如何在主类中扩展JFrame和JPanel?