Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用java读取文件上载的内容_Java_File Upload_Apache Poi_Struts - Fatal编程技术网

用java读取文件上载的内容

用java读取文件上载的内容,java,file-upload,apache-poi,struts,Java,File Upload,Apache Poi,Struts,我知道如何上传文件: <html> <head> <title>File Uploading Form</title> </head> <body> <form action="UploadServlet" method="post" enctype="multipart/form-data"> File :<input type="file" name=

我知道如何上传文件:

<html>
<head>
<title>File Uploading Form</title>
</head>
<body>

<form action="UploadServlet" method="post"
                        enctype="multipart/form-data">

File :<input type="file" name="file" size="50" />

<input type="submit" value="Upload File"/>


</form>
</body>
</html>
现在,如何将这两个链接在一起。用户将文件上传到服务器上,服务器对其进行处理。i、 例如,它接受文件并打印其内容。我可以使用struts框架来实现这一点吗?我想上传excel表格并将内容打印到jsp页面。我有使用ApachePOI在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<Row> rowIterator = sheet.iterator();
            while (rowIterator.hasNext())
            {
                Row row = rowIterator.next();
                //For each row, iterate through all the columns
                Iterator<Cell> 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();
        }
    }
}
公共类ReadExcelDemo
{
公共静态void main(字符串[]args)
{
尝试
{
FileInputStream file=newfileinputstream(新文件(“howtodoinjava_demo.xlsx”);
//创建包含对.xlsx文件引用的工作簿实例
XSSF工作簿=新XSSF工作簿(文件);
//从工作簿中获取第一张/所需的工作表
XSSFSheet sheet=workbook.getSheetAt(0);
//逐个遍历每一行
迭代器rowIterator=sheet.Iterator();
while(roweiterator.hasNext())
{
行=行迭代器。下一步();
//对于每一行,遍历所有列
迭代器cellIterator=row.cellIterator();
while(cellIterator.hasNext())
{
Cell=cellIterator.next();
//检查相应的单元格类型和格式
开关(cell.getCellType())
{
case Cell.Cell\u类型\u数值:
System.out.print(cell.getNumericCellValue()+“t”);
打破
case Cell.Cell\u类型\u字符串:
System.out.print(cell.getStringCellValue()+“t”);
打破
}
}
System.out.println(“”);
}
file.close();
}
捕获(例外e)
{
e、 printStackTrace();
}
}
}
输出:

ID名称LASTNAME 1.0 Amit Shukla 2.0洛克什-古普塔
3.0约翰·阿德沃兹 4.0布莱恩·舒尔茨


但是如何将上传的文件和servlet文件缝合在一起呢。如何读取上传的文件?

与Java中的许多操作一样,读取上传的文件不必要地复杂,而且很难从javadocs中计算出来。 您已经计划使用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");
    }
  }

您可以通过将整个过程分为两个步骤来实现

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=新文件(filePath)对象以获取文件位置。

我找到了。索引文件(html)用于上传文件(如我的问题中所述) 它的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("<html>");
         out.println("<head>");
         out.println("<title>Servlet upload</title>");  
         out.println("</head>");
         out.println("<body>");
         out.println("<p>No file uploaded</p>"); 
         out.println("</body>");
         out.println("</html>");
         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("<html>");
      out.println("<head>");
      out.println("<title>Servlet upload</title>");  
      out.println("</head>");
      out.println("<body>");
      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 + "<br>");
            out.println("Uploaded in location: "+filePath);
         }
      }
      out.println("</body>");
      out.println("</html>");
      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.");
   } 
}
import java.io.*;
导入java.util.*;
导入javax.servlet.ServletConfig;
导入javax.servlet.ServletException;
导入javax.servlet.http.HttpServlet;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
导入org.apache.commons.fileupload.FileItem;
导入org.apache.commons.fileupload.FileUploadException;
导入org.apache.commons.fileupload.disk.DiskFileItemFactory;
导入org.apache.commons.fileupload.servlet.ServletFileUpload;
导入org.apache.commons.io.output.*;
公共类UploadServlet扩展了HttpServlet{
私有布尔是多重的;
私有字符串文件路径;
private int maxFileSize=50*1024;
私有整数maxmesize=4*1024;
私有文件;
公共void init(){
//获取文件存储位置。
文件路径=
getServletContext().getInitParameter(“文件上载”);
}
public void doPost(HttpServletRequest请求,
HttpServletResponse(响应)
抛出ServletException,java.io.IOException{
//检查我们是否有文件上传请求
isMultipart=ServletFileUpload.isMultipartContent(请求);
response.setContentType(“text/html”);
java.io.PrintWriter out=response.getWriter();
如果(!isMultipart){
out.println(“”);
out.println(“”);
out.println(“Servlet上传”);
out.println(“”);
out.println(“”);
out.println(“没有上传文件”

”; out.println(“”); out.println(“”); 返回; } DiskFileItemFactory=新的DiskFileItemFactory(); //将存储在内存中的最大大小 factory.setSizeThreshold(maxMemSize); //保存大于maxMemSize的数据的位置。 setRepository(新文件(“c:\\temp”); //创建新的文件上载处理程序 ServletFileUpload upload=新的ServletFileUpload(工厂); //要上载的最大文件大小。 upload.setSizeMax(maxFileSize); 试试{ //解析请求以获取文件项。 List fileItems=upload.parseRequest(请求); //处理上载的文件项 迭代器i=fileItems.Iterator(); out.println(“”); out.println(“”); out.println(“Servlet上传”); out.println(“”); out.println(“”); 字符串fileName=“”; 而(i.hasNext()) { FileItem fi=(FileItem)i.next(); 如果(!fi.isFormField()) { //获取上传的文件参数 字符串fieldName=fi.getFieldName(); fileName=fi.getName(); 字符串contentType=fi.getContentType(); 布尔值isInMemory=fi.isInMemory(); long-sizeInBytes=fi.getSize(); //写文件 如果(
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("<html>");
         out.println("<head>");
         out.println("<title>Servlet upload</title>");  
         out.println("</head>");
         out.println("<body>");
         out.println("<p>No file uploaded</p>"); 
         out.println("</body>");
         out.println("</html>");
         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("<html>");
      out.println("<head>");
      out.println("<title>Servlet upload</title>");  
      out.println("</head>");
      out.println("<body>");
      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 + "<br>");
            out.println("Uploaded in location: "+filePath);
         }
      }
      out.println("</body>");
      out.println("</html>");
      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.");
   } 
}
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<Row> rowIterator = sheet.iterator();   
    while (rowIterator.hasNext()) {            
        Row row = rowIterator.next();
        //For each row, iterate through all the columns  
        Iterator<Cell> 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();   
        }
    }
 }