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

时间:2014-01-11 20:28:31

标签: 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

1 个答案:

答案 0 :(得分:4)

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

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

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

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