当前位置: 代码迷 >> java >> 无法从url.getFile()获取文件
  详细解决方案

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

热度:113   发布时间:2023-08-04 09:15:00.0

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

MyProject \\ Web内容\\ 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);
    }
}

我得到After getResource日志,但似乎在File Wadafak = new File(url.getFile());处失败

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

您正在获取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);
    }
}

Web项目最正确的结构是:

+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");

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