使用Servlet获取编写文本文件的路径时感到困惑

时间:2017-08-04 07:58:35

标签: java eclipse servlets

我的日食中有以下项目结构。

enter image description here

我在servlet中的代码如下所示。

File entityFile = new File(getServletContext().getContextPath() + "/EntityList/entities.txt");
FileWriter fout = new FileWriter(entityFile);
fout.write("The Content");
fout.close();

这里基本上我试图写入/EntityList/entities.txt处可用的文件,但是当我运行此文件时,我得到如下例外。

  

SEVERE:Servlet的Servlet.service()   [com.luis.servlets.WriteEntityToAFile]在带有路径的上下文中   [/ LUISWebUI]抛出异常java.io.FileNotFoundException:   \ LUISWebUI \ EntityList \ entities.txt(系统无法找到路径   指定)

我知道我的路径出了问题,有人可以把我放在正确的方向。

更新

为混乱道歉。

我将一些数据从jsp发送到servlet以写入entities.txt文件。我能够在servlet中捕获它(通过执行sysout交叉检查它)。

2 个答案:

答案 0 :(得分:1)

首先,我认为您有拼写错误问题,请尝试使用/EntitiesList/entities.txt代替/EntityList/entities.txt

另外,移动/EntitiesList/entities.txt下的/WEB-INF/,以便servlet班级可以访问它。

您可以阅读更详细的解释in this SO answer

修改

关于写入文件:您的应用程序将打包在WAR文件中,因此您将无法写入该文件,只能从中读取(有关此here的更多信息)。

但您可以使用这种方式直接在WAR外创建文件并使用此位置编写内容(在此之前,请确保您拥有适当的权限):

File entityFile = new File(getServletContext().getContextPath() + "entities.txt");
FileWriter fOut = new FileWriter(entityFile);
fOut.write("The Content");
fOut.close();

或者如果您还想要该目录,则必须执行一些额外的步骤,先创建它,然后在其中指定要写入的文件名:

 File entityFolder = new File(getServletContext().getContextPath() + "EntitiesList");
 entityFolder.mkdir();
 File entityFile = new File(entityFolder, "entities.txt");
 FileWriter fOut = new FileWriter(entityFile);
 fOut.write("The Content");
 fOut.close();

答案 1 :(得分:0)

  1. 首先在您的路径中存在Typo错误
  2. 其次你应该使用getResourceAsStream()来加载文件以供写作。
  3. 代码示例:

      InputStream input = getServletContext().
                                  getResourceAsStream("/WEB-INF/EntityList/entities.txt");
    
      Files.copy(InputStream input , Path target) 
      //Or Files.copy(Path source, OutputStream out)
    

    使用FileInputStream似乎更容易,但最好使用ResourceStream 在这里阅读https://stackoverflow.com/a/2161583/8307755
    https://stackoverflow.com/a/2308224/8307755