在java中读取文件上传的内容

我知道如何上传文件:

  File Uploading Form   
File :

这是用于读取文件的类:

 import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class BufferedReaderExample { public static void main(String[] args) { try (BufferedReader br = new BufferedReader(new FileReader("C:\\testing.txt"))) { String sCurrentLine; while ((sCurrentLine = br.readLine()) != null) { System.out.println(sCurrentLine); } } catch (IOException e) { e.printStackTrace(); } } } 

现在,您如何将这两者联系在一起。 用户将文件上载到服务器上,服务器对其进行处理。 即,它接受文件并打印它的内容。 我可以使用struts框架吗? 我想上传excel表并将内容打印到jsp页面。 我有使用apache poi在java中读取excel表的代码。 但是读取excel文件的路径是硬编码的。 你怎么从上传的文件中取出它?

这是用于阅读excel表的文件:

 public class ReadExcelDemo { public static void main(String[] args) { try { FileInputStream file = new FileInputStream(new File("howtodoinjava_demo.xlsx")); //Create Workbook instance holding reference to .xlsx file XSSFWorkbook workbook = new XSSFWorkbook(file); //Get first/desired sheet from the workbook XSSFSheet sheet = workbook.getSheetAt(0); //Iterate through each rows one by one Iterator rowIterator = sheet.iterator(); while (rowIterator.hasNext()) { Row row = rowIterator.next(); //For each row, iterate through all the columns Iterator cellIterator = row.cellIterator(); while (cellIterator.hasNext()) { Cell cell = cellIterator.next(); //Check the cell type and format accordingly switch (cell.getCellType()) { case Cell.CELL_TYPE_NUMERIC: System.out.print(cell.getNumericCellValue() + "t"); break; case Cell.CELL_TYPE_STRING: System.out.print(cell.getStringCellValue() + "t"); break; } } System.out.println(""); } file.close(); } catch (Exception e) { e.printStackTrace(); } } } 

输出:

ID NAME LASTNAME 1.0 Amit Shukla 2.0 Lokesh Gupta
3.0 John Adwards 4.0 Brian Schultz

但是如何将上传的和servlet文件拼接在一起。 你如何阅读上传的文件?

您可以通过分两步打破整个过程来实现它

1)上传文件

 boolean isMultipart = ServletFileUpload.isMultipartContent(request); if (!isMultipart) { return; } // Create a factory for disk-based file items DiskFileItemFactory factory = new DiskFileItemFactory(); // Sets the size threshold beyond which files are written directly to // disk. factory.setSizeThreshold(MAX_MEMORY_SIZE); // Sets the directory used to temporarily store files that are larger // than the configured size threshold. We use temporary directory for // java factory.setRepository(new File(System.getProperty("java.io.tmpdir"))); // constructs the folder where uploaded file will be stored String uploadFolder = getServletContext().getRealPath("") + File.separator + DATA_DIRECTORY; // Create a new file upload handler ServletFileUpload upload = new ServletFileUpload(factory); // Set overall request size constraint upload.setSizeMax(MAX_REQUEST_SIZE); try { // Parse the request List items = upload.parseRequest(request); Iterator iter = items.iterator(); while (iter.hasNext()) { FileItem item = (FileItem) iter.next(); if (!item.isFormField()) { String fileName = new File(item.getName()).getName(); String filePath = uploadFolder + File.separator + fileName; File uploadedFile = new File(filePath); System.out.println(filePath); // saves the file to upload directory item.write(uploadedFile); } } // displays done.jsp page after upload finished getServletContext().getRequestDispatcher("/done.jsp").forward( request, response); } catch (FileUploadException ex) { throw new ServletException(ex); } catch (Exception ex) { throw new ServletException(ex); } 

2)上传后传递文件位置到使用apche poi读取文件数据的方法。 使用File uploadedFile = new File(filePath); 对象获取文件位置。

与Java中的许多操作一样,读取文件上载是不必要的复杂,并且难以从javadoc中解决。 您已经计划使用Apache库来读取上传的文件,因此我建议您使用apache.commons.fileupload上传文件。

此代码片段将CSV文件上载到字符串中:

 ... import org.apache.commons.fileupload.*; import org.apache.commons.fileupload.disk.*; import org.apache.commons.fileupload.servlet.*; ... if (ServletFileUpload.isMultipartContent(request)) { int i=0; DiskFileItemFactory factory = new DiskFileItemFactory(); // files smaller than 5MB will be held in memory factory.setSizeThreshold(5000000); ServletFileUpload upload = new ServletFileUpload(factory); upload.setFileSizeMax(10000000); // max size of attachment 10MB List list = upload.parseRequest(request); Iterator iter = list.iterator(); String csv = null; while (iter.hasNext()) { FileItem param = (FileItem)iter.next(); if (!param.isFormField()) { csv = param.getString(); break; } } if (csv==null) { throw new Exception("CSV buffer not uploaded"); } } 

我知道了。 索引文件(html)用于上传文件(如上所述qquestion)它的java类是:

 import java.io.*; import java.util.*; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.io.output.*; public class UploadServlet extends HttpServlet { private boolean isMultipart; private String filePath; private int maxFileSize = 50 * 1024; private int maxMemSize = 4 * 1024; private File file ; public void init( ){ // Get the file location where it would be stored. filePath = getServletContext().getInitParameter("file-upload"); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { // Check that we have a file upload request isMultipart = ServletFileUpload.isMultipartContent(request); response.setContentType("text/html"); java.io.PrintWriter out = response.getWriter( ); if( !isMultipart ){ out.println(""); out.println(""); out.println("Servlet upload"); out.println(""); out.println(""); out.println("

No file uploaded

"); out.println(""); out.println(""); return; } DiskFileItemFactory factory = new DiskFileItemFactory(); // maximum size that will be stored in memory factory.setSizeThreshold(maxMemSize); // Location to save data that is larger than maxMemSize. factory.setRepository(new File("c:\\temp")); // Create a new file upload handler ServletFileUpload upload = new ServletFileUpload(factory); // maximum file size to be uploaded. upload.setSizeMax( maxFileSize ); try{ // Parse the request to get file items. List fileItems = upload.parseRequest(request); // Process the uploaded file items Iterator i = fileItems.iterator(); out.println(""); out.println(""); out.println("Servlet upload"); out.println(""); out.println(""); String fileName = ""; while ( i.hasNext () ) { FileItem fi = (FileItem)i.next(); if ( !fi.isFormField () ) { // Get the uploaded file parameters String fieldName = fi.getFieldName(); fileName = fi.getName(); String contentType = fi.getContentType(); boolean isInMemory = fi.isInMemory(); long sizeInBytes = fi.getSize(); // Write the file if( fileName.lastIndexOf("\\") >= 0 ){ file = new File( filePath + fileName.substring( fileName.lastIndexOf("\\"))) ; }else{ file = new File( filePath + fileName.substring(fileName.lastIndexOf("\\")+1)) ; } fi.write( file ) ; out.println("Uploaded Filename: " + fileName + "
"); out.println("Uploaded in location: "+filePath); } } out.println(""); out.println(""); ReadExcelDemo rd = new ReadExcelDemo(); System.out.println("file name: "+fileName.substring(fileName.lastIndexOf("\\"))); String s = fileName.substring(fileName.lastIndexOf("\\")); System.out.println(filePath); System.out.println(s); String fileP = filePath.concat(s+"\\"); System.out.println(fileP); rd.read(fileP); }catch(Exception ex) { System.out.println(ex); } } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { throw new ServletException("GET method used with " + getClass( ).getName( )+": POST method required."); } }

这是使用apache poi jar阅读excel表的类:

 import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.Iterator; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class ReadExcelDemo { public static void read(String filePath) { // public static void main(String[] args){ try { FileInputStream file = new FileInputStream(new File(filePath)); // FileInputStream file = new FileInputStream(new File("C:\\work\\demo.xlsx")); //Create Workbook instance holding reference to .xlsx file XSSFWorkbook workbook = new XSSFWorkbook(file); //Get first/desired sheet from the workbook XSSFSheet sheet = workbook.getSheetAt(0); //Iterate through each rows one by one Iterator rowIterator = sheet.iterator(); while (rowIterator.hasNext()) { Row row = rowIterator.next(); //For each row, iterate through all the columns Iterator cellIterator = row.cellIterator(); while (cellIterator.hasNext()) { Cell cell = cellIterator.next(); //Check the cell type and format accordingly switch (cell.getCellType()) { case Cell.CELL_TYPE_NUMERIC: System.out.print(cell.getNumericCellValue() + "\t"); break; case Cell.CELL_TYPE_STRING: System.out.print(cell.getStringCellValue() + "\t"); break; } } System.out.println(""); } /* int row=0; int k=1; Row myRow = sheet.createRow ((short)row); myRow.createCell(k).setCellValue ("new data"); myRow = sheet.createRow ((short)row++); */ // Cell cell1 = sheet. // Access the second cell in second row to update the value // cell1.setCellValue("OverRide Last Name"); Cell cell1 = null; // declare a Cell object cell1 = sheet.getRow(2).getCell(2); // Access the second cell in second row to update the value cell1.setCellValue("OverRide Last Name"); file.close(); /* FileOutputStream out = new FileOutputStream(new File("write_demo1.xlsx")); workbook.write(out); out.close(); */ } catch (Exception e) { e.printStackTrace(); } } }