2010-01-12 78 views
1

我正在使用jboss,eclipse和svn。我必须将文件存储在我的测试文件夹中:test/create.jsptest/data.txt。我想要做的是当我打电话给我的create.jsp它将更新我的data.txt。显然,我希望我的data.txt保持在其他脚本正在尝试从中读取的位置。试图更新src/web/prod文件夹中的文件(jsp)

我已经尝试了几十种将路径放入File对象的新方法,但由于某种原因它在jboss war文件夹下创建了该文件。

尝试:

ServletContext app = getServletContext(); 
String path1 = app.getRealPath("/"); 
File f = new File(path1); 
// AND 
File f = new File("../../data.txt"); 

回答

2

假设/test文件夹位于web内容,那么你需要以下条件:

String absolutePath = getServletContext().getRealPath("/test/data.txt"); 
File file = new File(absolutePath); 

String webcontentRoot = getServletContext().getRealPath("/"); 
File file = new File(webcontentRoot, "test/data.txt"); 

你看到了吗? Java IO只能识别本地磁盘文件系统路径,而不是上下文之外的URL或路径。 ServletContext#getRealPath()用于将相关网络路径转换为绝对本地磁盘文件系统路径,后者又可用于常见的Java IO内容。你应该从来没有在Java IO东西中使用相对路径。您将依赖于当前的工作目录,每个环境/情况可能有所不同。

也就是说,您通常不想将文件写入web内容。无论何时重新部署WAR,它们都会丢失。而是在webapp外的其他地方创建一个固定的磁盘文件系统路径,并利用它。或甚至更好,利用独立的SQL数据库:)

+0

absolutePath和webcontentRoot都指向一个位置,它的:“C:\ workspace \ infweb \ gen \ jboss \ jboss-4.2.2.GA \ server \ default \。\ deploy \ infweb.war \ test \ data.txt“,我真的希望它是”C:\ workspace \ infweb \ src \ web \ prod \ test.txt“可能我只是混淆了路径而不是充分了解部署时发生的情况。 大声笑,是的,如果它在我手中,我会用sql,我的生活会容易得多。 – Zoheir 2010-01-12 03:09:02

相关问题