我正在一起使用jboss,eclipse和svn。我必须将文件存储在我的测试文件夹中: test / create.jsp 和 test / data.txt 。我要做的是,当我调用 create.jsp时 ,它将更新 data.txt 。显然,我希望我的data.txt保持原样,因为其他脚本正在尝试从中读取。
我尝试了数十种新方法将路径放置到File对象,但是由于某种原因,它在jboss war文件夹下创建了文件。
尝试过:
ServletContext app = getServletContext(); String path1 = app.getRealPath("/"); File f = new File(path1); // AND File f = new File("../../data.txt");
假设该/test文件夹位于webcontent中,则需要以下内容:
/test
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中使用相对路径。您将取决于当前的工作目录,该目录可能因环境/情况而异。
ServletContext#getRealPath()
也就是说,您通常不想将文件写入Web内容。只要您重新部署WAR,它们就会迷路。而是在webapp之外的其他地方创建固定磁盘文件系统路径并加以利用。甚至更好的是,使用独立的SQL数据库:)