1

我最近使用 eclipse 在 Java 中创建了一个 Web 项目。我有一个包含计时器任务的 servlet。此计时器任务调用我创建的 XML 写作类的“writeList”方法。这一切都很好,我已经使用 System.out 验证了它每分钟运行一次。

当我在 Eclipse 中作为应用程序运行我的 XML Writing 类时,它运行良好。该文件输出到“WebContent/test.rdf”没有任何问题。

但是,当我的 servlet 中的计时器任务调用它时,我收到以下错误:

java.io.FileNotFoundException: WebContent/Test.rdf(No such file or directory)
     at java.io.FileOutputStream.open(Native Method)
     at java.io.FileOutputStream.<init>(FileOutputStream.java:179)
     at java.io.FileOutputStream.<init>(FileOutputStream.java:70)
     at com.XMLWriter.writeList(XMLWriter.java:58)
     at com.ServerTimer$1.run(ServerTimer.java:30)
     at java.util.TimerThread.mainLoop(Timer.java:512)
     at java.util.TimerThread.run(Timer.java:462)

XMLWriter第58行代码如下:

fileOut = new FileOutputStream("WebContent/TEST.rdf");
model.write(fileOut);

fileOut 是 FileOutputStream,model 是 Jena 模型的一个实例,因为我正在使用 RDF。

任何帮助将不胜感激,我已经坚持了好几天了!有任何问题请告诉我!

编辑:所以它现在正在工作,但我想将文件写入我的 Web 项目的“WebContent”目录。有没有办法自动做到这一点?我无法让系统动态找到该目录。

4

2 回答 2

0

这是因为目录不存在。创建目录(以编程方式或离线)或在基本路径上创建文件夹。

于 2010-03-03T13:59:28.253 回答
0

你不应该那样依赖相对路径。在 Java IO 中使用相对路径会带来可移植性问题。对它正在运行的Web 应用程序上下文java.io.File一无所知。实际路径将取决于当前工作目录,这在所有环境中本身并不相同,并且取决于您启动服务器/应用程序的方式。例如,它可能变得相对于,C:/Tomcat/bin而你TEST.rdf显然不在那里。始终使用绝对路径,即使用完整的磁盘文件系统路径。

对于 JSP/Servlet Web 应用程序,您可以使用ServletContext#getRealPath()将相对Web路径转换为绝对磁盘文件系统路径,您可以在 Java IO 中进一步使用该路径。相对网络路径植根于公共网络内容。假设它/TEST.rdf位于公共 web 内容的根目录中,那么您可以通过/TEST.rdf以下方式获取 servlet 内部的绝对磁盘文件系统路径:

String relativeWebPath = "/TEST.rdf";
String absoluteDiskPath = getServletContext().getRealPath(relativeWebPath);
File file = new File(absoluteDiskPath);
于 2010-03-03T16:59:07.743 回答