当前位置: 首页 > 知识库问答 >
问题:

java FileNotFoundException在读取config xml文件时

邢寒
2023-03-14

我需要从我的DYNAMIC WEB PROJECT读取一个config.xml文件。我已将我的文件放在文件夹结构MyProj/WebContent/WEB-INF/class/config.xml文件夹中。当我打印文件的绝对路径new File(config.xml). getAbsoltePath()时,它会检查eclipse主目录(C:\Temp\eclipse\eclipse)而不是我的项目主目录(C:\Temp\MyProj)。因此,我遇到了FIleNotFoundException问题。如何告诉eclipse从我的项目目录中检查文件?

在eclipse IDE中使用tomcat 7。

共有1个答案

商佑运
2023-03-14

如果您的项目是一个动态Web应用程序,这意味着您应该尊重JEE规则,其中一条规则是:不要使用文件,而是使用资源。您的Web应用程序将部署在可以安装在任何地方的Web容器(如Tomcat)中。通过将配置文件作为资源访问,它们会在类路径中搜索,该类路径更灵活,独立于Web应用程序或容器的绝对文件位置。

如果您将config.xml放在WEB-INF/class中,它将在您的类路径中。您应该将其作为资源而不是文件访问。

我建议您提高关于如何在java中管理和访问资源的知识。

在课堂上,你可以做:

InputStream configInput=this.getClass().getResourceAsStream("/config.xml");

由于它是一个XML文件,您可以使用XML解析器读取它:

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.xml.sax.SAXException;
...
    try {
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
        Document doc = dBuilder.parse(this.getClass().getResourceAsStream("/config.xml"));
    } catch (ParserConfigurationException | SAXException | IOException e) {
        e.printStackTrace();
    }
 类似资料:
  • 问题内容: 我必须阅读tomcat日志文件,并在一段时间(例如:一个小时)后再次读取该文件(仅针对新添加的内容),因此我创建了RandomAccessFile来记录我完成的最后一个位置并使用BufferedReader.readLine()方法。 但是,我发现有时我无法读取文件的整行。 例如,tomcat正在尝试编写以下内容(仅作为示例): 192.168.0.0本地主机/index.html .

  • 工作表列表 全量读取 游标读取 跳过指定行 忽略空白单元格 忽略空白行 忽略跳过动作常量 设置全局读取类型 单元格回调模式读取 数据类型读取 数据类型常量

  • 读取文件已支持 windows 系统,版本号大于等于 1.3.4.1; 扩展版本大于等于 1.2.7; PECL 安装时将会提示是否开启读取功能,请键入 yes; 编译 编译时需添加 --enable-reader ./configure --enable-reader 示例 $config = ['path' => './tests']; $excel = new \Vtiful\K

  • 这是我在大学的一个项目,一切似乎都很好,除了游戏课,它初始化了游戏。下面是一个片段 之后是一些getter和我要实现的4个方法。这些方法是、、、 我创建了,以便它在此处返回String[]的数组列表: 然后,我想加载一些攻击、敌人和龙,并将它们插入相应的数组列表中。 我在此处应用了: 我这样写它,它接受从返回的ArrayList,并使用开关在ArrayList中的每个String[]中搜索第一个字

  • 问题内容: 我正在尝试读取资源(asdf.txt),但是如果文件大于5000字节,例如,在content变量的末尾插入了4700个空字符。有什么办法可以删除它们?(或设置缓冲区的正确大小?) 这是代码: 问题答案: 最简单的方法是做正确的事情:使用阅读器读取文本数据: 并非 一定 要定义要读取的文本文件的编码。在上面的示例中,它将是THE_ENCODING。 请注意,您的代码和本示例代码在Java

  • 问题内容: 阅读部分不是并发的,但处理是并发的。我用这种方式来命名标题,因为我最有可能使用该短语再次搜索此问题。:) 尝试 超越示例 之后,我陷入僵局,因此这对我来说是一种学习经验。我的目标是: 逐行读取文件(最终使用缓冲区执行多行)。 将文本传递给执行某些正则表达式的工作。 将结果发送到某个地方,但要避免使用互斥或​​共享变量。我正在将整数(总是数字1)发送到通道。这有点愚蠢,但是如果不引起问题

  • 问题内容: 我正在编写一个Elasticsearch插件,该插件依赖于从磁盘上的文件读取数据。当我尝试在代码中访问此文件时,出现以下异常。 有什么推荐的方法来访问Elasticsearch插件中的文件吗?有什么快速的解决方法可以访问插件中的文件? 问题答案: 一种方法是通过禁用安全管理器来启动Elasticsearch流程,如下所示: 从ES 2.x开始,默认情况下启用Java安全管理器,因此之前

  • 读写文件是很多程序的基本任务,下面我们看看Go里面的文件读取。 package main import ( "bufio" "fmt" "io" "io/ioutil" "os" ) // 读取文件的函数调用大多数都需要检查错误, // 使用下面这个错误检查方法可以方便一点 func check(e error) { if e != nil {