[英]Upload a CSV file through a JSP page and print its contents using a Servlet..?
我需要設計一個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文件存儲在任何地方。 只想閱讀其內容並打印它們。
您可以使用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
我也有類似的要求,我需要通過jsp上傳一個jsp文件並通過Servlet處理它
因此在這里,我使用了Apache稱為opencsv的庫。
upload.jsp
<form action="./upload" method="post" enctype="multipart/form-data">
<input type="text" name="description" />
<input type="file" name="file" />
<input type="submit" />
</form>
UploadServlet.java
import com.opencsv.CSVReader;
@WebServlet(name = "upload", urlPatterns = { "/upload" })
@MultipartConfig
public class UploadServlet extends HttpServlet {
public UploadServlet() {
super();
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Part filePart = request.getPart("file");
InputStream fileContent = filePart.getInputStream();
Reader in = new InputStreamReader(fileContent);
CSVReader reader;
Iterator<String[]> iterator;
try {
reader = new CSVReader(new InputStreamReader(fileContent));
iterator = reader.iterator();
String[] row = iterator.next();
Map<Object, String> map = new HashMap<>();
for(int i = 0; i < row.length; i++){
map.put(i, row[i]);
//Do rest of the code
}
}catch(Exception e) {}
in.close();
}
}
其他 :
在開發上述要求時,我還遇到了一個問題,拋出異常,該異常指定ClassNotFound ....(將inputstream轉換為CSVReader實例時)
這是因為即使將庫正確地附加到了開發環境,它也沒有附加到運行時環境。
解決方案:
將庫文件復制到服務器位置的lib文件夾中,然后重新啟動服務器(先關閉然后再啟動)。 通過這樣做,我能夠解決問題
另一個更好的選擇是使用諸如Gradle或Maven之類的Build工具,而不是使用JSP / Servlet(我的個人觀點)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.