【问题标题】:Using FileOutputStreams and Jena Models in Java Servlets within an Eclipse Web Project [duplicate]在 Eclipse Web 项目中的 Java Servlet 中使用 FileOutputStreams 和 Jena 模型 [重复]
【发布时间】:2011-01-23 05:26:24
【问题描述】:

我最近使用 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”目录。有没有办法自动做到这一点?我无法让系统动态找到该目录。

【问题讨论】:

  • 检查权限和WebContent是否存在?

标签: java xml servlets jena fileoutputstream


【解决方案1】:

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

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

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

【讨论】:

  • 工作出色!非常感谢!
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2013-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-22
    • 2018-01-23
    • 2012-06-28
    • 1970-01-01
    • 2011-05-08
    相关资源
    最近更新 更多