我需要设计一个JSP页面,用户通过该页面上传CSV文件,然后我需要通过Servlet在屏幕上打印其内容。
HTML代码喜欢这个
<form action="decode" enctype="multipart/form-data" method="post>
<input type="file" name="record" />
<input type="submit" />
</form>
现在在decode.java中,
DiskFileItemFactory fi = new DiskFileItemFactory();
ServletContext sc = this.getServletConfig().getServletContext();
File file = (File) sc.getAttribute("javax.servlet.context.tempdir");
fi.setRepository(file);
ServletFileUpload upload = new ServletFileUpload(fi);
List<FileItem> items = upload.parseRequest(request);
接下来我应该怎么做才能阅读上传的CSV文件中的每一个字......? 我不想将CSV文件存储在任何地方。只想阅读其内容并打印出来。
答案 0 :(得分:0)
您可以使用Apache的JAVA CSV解析器库读取CSV文件。
然后在类路径中导入库后,您只需将其用作
即可Reader in = new FileReader(file); //The file is the file which you get from the request(java.io.File)
Iterable<CSVRecord> records = CSVFormat.EXCEL.parse(in);
for (CSVRecord record : records) {
//Do something with the records
}
有关详细信息,请查看https://commons.apache.org/proper/commons-csv/index.html
答案 1 :(得分:0)
我也有类似的要求,我需要通过jsp上传一个jsp文件并通过Servlet处理它
因此在这里,我使用了Apache称为opencsv的库。
upload.jsp
#dashboard[_ngcontent-xsb-c0]
UploadServlet.java
<form action="./upload" method="post" enctype="multipart/form-data">
<input type="text" name="description" />
<input type="file" name="file" />
<input type="submit" />
</form>
其他:
在开发上述要求时,我还遇到了一个问题,在抛出异常时指定了ClassNotFound ....(将输入流转换为CSVReader实例时)
这是因为即使已正确地将库附加到开发环境,该库也未附加到运行时环境。
解决方案:
将库文件复制到服务器位置的lib文件夹中,然后重新启动服务器(先关闭然后再启动)。 通过这样做,我能够解决问题
另一个更好的选择是使用gradle或maven之类的Build工具,而不是使用JSP / Servlet(我个人的观点)