0

我的 Web 应用程序中有一个简单的 java 类,我在其中编写了以下代码,但它不起作用

File test= new File("/templates/xmdForModel.xsd");

模板文件夹位于应用程序的根文件夹内。

文件的位置是---->文件的application-root/package/test.java
位置是-------->application-root/testRoot/template/xmdForModel.xsd

错误

无法读取架构文档'file:/templates/xmdForModel.xsd',因为 1) 找不到文档;2) 文件无法读取;3) 文档的根元素不是 .

4

2 回答 2

1

如果要在 Web 应用程序中查找文件的文件名,可以使用ServletContext#getRealPath

但是,我建议使用带有Class#getResourceAsStream的类加载器加载您的资源。这样,即使该文件实际上并不作为文件存在(例如仅在 jar 中),它也可以工作。

如果这是一个用户应该编辑(或您写入)的文件,我会将它放在 Web 应用程序之外,然后指定一个绝对路径(例如“/etc/myapp/conf/xmd.xsd ") 带有可配置的前缀。

于 2012-12-28T06:56:13.240 回答
0

File 构造函数中的路径可以是绝对的或相对的。当您以“/”开始路径时(在基于 linux 的操作系统中),它将将该路径视为绝对路径并在文件结构的根目录中创建一个文件/文件夹(而不是在项目的根目录中) . 这就像在 Windows 机器中指定 c:\templates 一样。

尝试删除第一个斜线并运行您的程序。删除第一个斜杠将使该部分与您的 .java 文件相对。因此,您可以使用 ../ 切换到父文件夹。java:application-root/package/test.java 文件:application-root/testRoot/template/xmdForModel.xsd

因此,从您的 java 文件中,您需要将目录更改为应用程序根文件夹,然后选择模板文件夹。跟下面一样。

文件 x = new File("../testRoot/template/xmdForModel.xsd");


来源:http://docs.oracle.com/javase/tutorial/essential/io/path.html

/home/sally/statusReport 是绝对路径。定位文件所需的所有信息都包含在路径字符串中。

相对路径需要与另一个路径组合才能访问文件。例如,joe/foo 是一个相对路径。如果没有更多信息,程序就无法可靠地定位文件系统中的 joe/foo 目录。

于 2012-12-28T07:10:46.750 回答