【问题标题】:FilenotfoundExcption in JAVAEE Eclipse [duplicate]JAVA EE Eclipse 中的 FilenotfoundException [重复]
【发布时间】:2018-03-12 14:53:38
【问题描述】:

服务器:tomcat。

我创建了一个 Servlet 来调用 JAVA 程序来处理 CSV 文件。

代码 new ToJSON().main(files) 会将 csv 文件处理为 json。

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String [] files = request.getParameter("files").split(",");
    System.out.println(String.join(",", files));
    new ToJSON().main(files);
    ////call the java program to convert CSV files to json then sent the file name or the contain back.
    response.getWriter().append("data.json");
}

SEVERE: Servlet.service() for servlet [charting.servlet.ChartingServlet] in context with path [/Charting] threw exception
java.io.FileNotFoundException: BankFileLine.csv (No such file or directory)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at java.io.FileInputStream.<init>(FileInputStream.java:93)
at java.io.FileReader.<init>(FileReader.java:58)
at format.LoadCSVFile.iterable(LoadCSVFile.java:60)
at format.LoadCSVFile.getMaxLength(LoadCSVFile.java:44)
at format.LoadCSVFile.<init>(LoadCSVFile.java:26)
at toJSON.ToJSON.main(ToJSON.java:26)

但我不断收到 filenotfoundexception。我试图将文件放入 WebContent 和 src。他们都没有工作。我尝试添加路径:localhost:8080/ChartingServlet/filename,还是不行。

这里是目录 Here is the directories of the project files

我的问题是我应该把文件放在哪里?

【问题讨论】:

  • 给出文件的绝对路径。你不能依赖当前的工作目录。

标签: java eclipse jakarta-ee


【解决方案1】:

在服务器上运行时的当前目录不是您应该依赖的任何东西,您所显示的任何内容都没有考虑到这一点。

1) 如果不将 csv 文件提供给客户端,您实际上并不关心文件在哪里,您只关心读取正确的内容。对于这种情况,您可以将它们放在 src 文件夹下,然后使用 servlet 类中的 #getResourceAsStream() 获取 InputStream 到它们的内容。这与在普通 Java 应用程序中的工作方式相同,如果您想将 Web 应用程序打包为 WAR 文件,也不会中断。

2) 如果客户端应该能够读取原始 .csv,您需要 get the ServletContext from your request object,然后使用 ServletContext#getRealPath() 构建文件系统绝对路径,传入相对于您的 WebContent 文件夹的路径,这样您知道文件的绝对位置,然后您可以正常阅读。这种方法往往无法将您的应用程序打包为WAR 文件。您可以在这种情况下尝试ServletContext#getResourceAsStream(),但我没有这方面的第一手经验,所以我不确定它是否有效。

【讨论】:

  • 非常感谢,它成功了,我可以读取文件并将文件内容发回。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-05
相关资源
最近更新 更多