【问题标题】:How do I read resource files in different packages?如何读取不同包中的资源文件?
【发布时间】:2014-01-30 19:02:56
【问题描述】:

我正在尝试从“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

【问题讨论】:

  • 你把这个文件放在哪里了?您确定作为参数提供的路径正确吗?它可能会帮助您使用绝对路径
  • 包如下: br.com.servtech.servlet.list ==> UserList.java br.com.servtech.model.json ==> User.json

标签: java json jsp servlets


【解决方案1】:

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

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

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

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

【讨论】:

  • 太好了!谢谢JB Nizet!
猜你喜欢
  • 2011-10-07
  • 2020-05-22
  • 1970-01-01
  • 1970-01-01
  • 2017-05-18
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 2010-09-29
相关资源
最近更新 更多