服务器:tomcat。
我创建了一个Servlet来调用JAVA程序来处理CSV文件。
代码新的ToJSON()。main(文件)将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
我的问题是我应该把文件放在哪里?
答案 0 :(得分:-1)
在服务器上运行时的当前目录不是您应该依赖的任何内容,并且您所显示的内容都没有考虑到这一点。
1)如果不将csv文件提供给客户端,则实际上并不关心文件的位置,只关心读取正确的内容。对于这种情况,您可以将它们放在src
文件夹下,然后使用servlet类中的#getResourceAsStream()
获取其内容InputStream
。这与普通Java应用程序的工作方式相同,如果要将Web应用程序打包为WAR
文件,则不会中断。
2)如果客户端应该能够读取原始的.csv,那么您需要get the ServletContext
from your request object,然后使用ServletContext#getRealPath()
构建文件系统绝对路径,传入相对于{的路径{1}}文件夹,以便您知道文件的绝对位置,然后您可以正常阅读。此方法无法将您的应用程序打包为WebContent
文件。你可以在那个场景中尝试ServletContext#getResourceAsStream()
,但我没有第一手经验,所以我不确定它是否有效。