无法从url.getFile()获取文件

时间:2015-07-28 07:28:09

标签: java eclipse servlets

我在Eclipse中有一个带有以下文件夹结构的Web项目

MyProject \ Web Content \ WEB-INF \ src \ com \ some \ path

以及路径文件夹中的过滤器servlet MyFilter 以及 src 中的文件。我正在尝试使用获取文件。这是代码的一部分

public MyFilter() {
    try {
        URL url = this.getClass().getClassLoader().getResource("antisamy-slashdot-1.4.4.xml");
        LOG.info("After getResource");
        File Wadafak = new File(url.getFile());//Fails Here
        LOG.info("After getFile "+Wadafak.getName());
        Policy policy = Policy.getInstance(url.getFile());
        antiSamy = new AntiSamy(policy);
    } catch (PolicyException e) {
        throw new IllegalStateException(e.getMessage(), e);
    }
}

我收到 在getResource 日志之后,但似乎在 文件Wadafak = new File(url.getFile());

我应该在哪里放置xml文件以便servlet检测到它?

2 个答案:

答案 0 :(得分:1)

您收到NullPointerException,因为this.getClass().getClassLoader().getResource("./format_xml/TransactionsFormat.xml")正在向您发送null。但是,如果xml位于src文件夹中,即在类路径中,则只需执行以下操作:

public MyFilter() {
    try {
        //URL url = this.getClass().getClassLoader().getResource("antisamy-slashdot-1.4.4.xml");
        LOG.info("After getResource");
        //access you xml file here directly. 
        File Wadafak = new File("antisamy-slashdot-1.4.4.xml");
        LOG.info("After getFile "+Wadafak.getName());
        Policy policy = Policy.getInstance(url.getFile());
        antiSamy = new AntiSamy(policy);
    } catch (PolicyException e) {
        throw new IllegalStateException(e.getMessage(), e);
    }
}

正如评论中所说,或者你可以这样做:

public MyFilter() {
    try {
        URL url = this.getClass().getClassLoader().getResource("/antisamy-slashdot-1.4.4.xml");
        LOG.info("After getResource");
        //access you xml file here directly. 
        File Wadafak = new File(url.getFile());
        LOG.info("After getFile "+Wadafak.getName());
        Policy policy = Policy.getInstance(url.getFile());
        antiSamy = new AntiSamy(policy);
    } catch (PolicyException e) {
        throw new IllegalStateException(e.getMessage(), e);
    }
}

答案 1 :(得分:1)

网络项目最重要的结构是:

+src
    ...java sources...
    ...properties and config files...
+WebContent
    ...HTMLs & JSPs...
    +WEB-INF
        +classes (auto-generated by Eclipse or packager)
            ... class files...
            ... properties and config files ....
        web.xml

根据此方案,如果将XML文件保存在src / my / package中,Eclipse将自动将其部署到WebContent / WEB-INF / classes / my / package。你可以从这样的过滤器访问:

URL url = getClass().getClassLoader().getResource("/my/package/antisamy-slashdot-1.4.4.xml");

请注意,路径必须以斜杠开头。