如何在java DynamicWebApplication中创建文件/文件夹?

时间:2013-04-14 14:32:12

标签: java eclipse jersey jax-ws

我正在使用REST with Java (JAX-RS) using Jersey来创建网络服务。 现在,对于我的项目,我需要在运行时相对于我的项目创建文件夹。

这就是我所做的。

String str = "<?xml version=1.0><users><user name=\"Taruni\" id=\"501\"></users>";          
File f= new File("helloWorldIndia.xml");
boolean status = f.createNewFile();
FileWriter writer = new FileWriter(f);
writer.write(str);

此处,状态返回true但文件在我的机器中的任何位置都不可见。我扫描了我的机器。即便如此,我也找不到。

创建文件夹/文件的正确方法是什么?是否可以创建相对于项目的文件夹?如果没有替代方案?

1 个答案:

答案 0 :(得分:0)

当你这样做时

  

new File(“helloWorldIndia.xml”)。createNewFile()

无论您在何处运行程序,都会创建“helloWorldIndia.xml”文件。在这种情况下,您的程序由Web服务器运行。因此,该文件将在您的网络服务器部署网络应用的路径上创建,而则在您放置war文件的位置创建。

让我们假设你的网络服务器是码头。使用默认配置,jetty在系统的临时文件夹中部署war,在Windows上为%TEMP%,在linux上为/ tmp。 在这种情况下,如果在temp文件夹中搜索“helloWorldIndia.xml”,则在运行代码后,您应该找到该文件。

有了这个说法,一些服务器在关闭服务器时会删除已部署的文件。在执行FS扫描时找不到文件的原因可能是在关闭服务器时已删除已部署的文件夹本身。

要找出代码编写文件的位置,请在代码段的末尾添加此行。

  

的System.out.println(f.getAbsolutePath());

这将记录使用当前代码创建文件的完整路径。

如果是网络应用,您应该将文件写入文件系统的绝对路径。在相对路径上写入是不安全的,因为如果将服务器配置为在不同的位置部署,则可能无法在不更改配置/代码的情况下找到先前写入的文件。

最好的方法是在代码中创建要在其中写入文件 configurable 的文件夹的绝对路径。您可以传递需要写入文件的文件夹路径 -

  • 作为环境变量(启动服务器时的-D属性)。
  • 作为servlet config
  • 等web.xml的this属性
  • 作为数据库中的配置条目。在运行时执行数据库查询以获取文件夹的路径。
  • 还有更多..

作为一个注释虽然不建议通过网络应用程序写文件,直到它不可避免。其中一个原因可能是交易。事务无法自动处理文件IO。如果事务失败并需要回滚,则必须手动处理文件写入方案。