java - 在 Eclipse Web 项目中的 Java Servlet 中使用 FileOutputStreams 和 Jena 模型

标签 java xml servlets jena fileoutputstream

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

当我从 Eclipse 中将 XML 编写类作为应用程序运行时,它工作得很好。文件输出到“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”目录。有什么方法可以自动执行此操作吗?我无法让系统动态查找该目录。

最佳答案

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

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

String relativeWebPath = "/TEST.rdf";
String absoluteDiskPath = getServletContext().getRealPath(relativeWebPath);
File file = new File(absoluteDiskPath);

关于java - 在 Eclipse Web 项目中的 Java Servlet 中使用 FileOutputStreams 和 Jena 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2371760/

相关文章:

php - RSS 提要是否必须是 XML 文件?

android - Android ImageButton 背景的挑战

java - 如何处理 DBUtil 中的 Date 类型值

java - 为什么我的 Servlet Filter 程序显示 404 http 错误?

java - Servlet URL 模式与斜杠前缀匹配

java - 在 JSP 页面中包含 Applet

java - Distance To() 两地之间的距离不正确

java - 文档中根元素后面的标记必须格式正确

java - 如何通过 Spring 在 Hibernate 中使用 ThreadLocal

java - 屏幕分辨率