Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java servlet-写入文件_Java_Servlets_File Io - Fatal编程技术网

Java servlet-写入文件

Java servlet-写入文件,java,servlets,file-io,Java,Servlets,File Io,我正在使用Netbeans IDE,目前正在使用服务器。 我想做的是写入文件 我查看了一些页面,现在的代码(据我所知,它不起作用)如下所示: File outputFile = new File(getServletContext().getRealPath("/") + "TheFile.txt"); FileWriter fout = new FileWriter(outputFile); fout.write("The Content");

我正在使用Netbeans IDE,目前正在使用服务器。 我想做的是写入文件

我查看了一些页面,现在的代码(据我所知,它不起作用)如下所示:

 File outputFile = new File(getServletContext().getRealPath("/")
            + "TheFile.txt");
    FileWriter fout = new FileWriter(outputFile);
    fout.write("The Content");
    fout.close();
这是我的项目结构:

还有,文件将放在哪里


编辑: 我忘了提到图片中的文件夹下面还有一些其他文件夹:测试包、库、测试库和配置文件。但是我不认为文件会放在那里

编辑(最新):
我发现该文件存储在/build/web文件夹中,但这不会出现在Netbeans中。即使在我重新启动它之后。

正如您所编码的,该文件将被放置在公共web根目录中。这就是
getRealPath(“/”
将指向的位置。确切地说,它是一个名为Web Pages的文件夹,如您的屏幕截图所示。作为练习,请执行以下操作以绘制绝对路径,以便您可以通过OS磁盘资源管理器找到它

System.out.println(file.getAbsolutePath());
我不做Netbeans,但可能需要在写入文件后刷新IDE中的文件夹,以便它出现在IDE的列表中。单击文件夹并按F5。这至少对Eclipse是正确的

也就是说,不建议采用这种方法。当servletcontainer未配置为扩展磁盘上的WAR时,这将不起作用。即使是这样,在重新部署WAR时,您也将丢失所有新文件和现有文件中的更改。不应将其用作永久存储。而是将其存储在webapp外部的固定路径或数据库中(这是首选,因为您似乎想重新发明CMS)。

有关详细信息,请参阅文档。它返回用URL指定的内容在磁盘上的位置

我猜您的文件位于Glassfish(WAR文件提取的地方)磁盘上web应用程序的根目录中。我对玻璃鱼的了解还不足以说明它会在哪里

另外,请注意,您正在使用字符串连接来创建文件名,因此如果getRealPath调用没有返回结尾带有“/”的字符串,那么您可能正在web应用的父目录中创建文件。在为实际文件创建文件对象时,最好为父目录使用文件对象。查看文件API

我建议在web应用程序之外创建该文件。如果重新部署WAR文件,则可能会删除文件,这可能不是您想要的


在servlet中,您想要输出一个文件这一事实几乎没有什么不同。只需遵循标准文件API作为起点。教程。

请注意,这并不能保证在所有web容器中或通过重新启动都能正常工作,而且很可能会被重新部署覆盖


如果您希望允许用户更新内容,则需要将新内容存储在某个位置,并使用servlet、JSP页面或facelet从备份存储中检索新内容并将其发送到浏览器。

我要做的是写入文件。
。写什么?你想要实现什么?我实际上想要写的是一个.html文件。我试图让某人能够更新已经存在的页面,比如index.html。。因此,当有人尝试执行时,应该执行上面的代码。谢谢!我找到了它的位置,现在它按照我的计划工作。另外,感谢您提供有关存储的更多信息。@whirlwin您能告诉我您是如何使用它的吗!!因为我遇到了同样的问题,我创建的文件存储在/build/web/下,而不是/web/下,并且提前感谢:)@MarwaChaabani我很想帮忙,但我不记得很久以前的事情了。我甚至不确定我是否能成功。谢谢。我深入研究了一下,getRealPath(“/”)返回一个以“/”结尾的字符串。另外,感谢您提供有关存储文件的更多信息。