浏览并选择Excell文件并在java中从中创建工作簿对象

时间:2017-07-13 18:54:18

标签: java servlets apache-poi

您好我想从我的系统中选择一个文件并创建Workbook对象。我在下面写了提供代码来做到这一点。如您所见,我正在将该文件写入某个临时位置,然后从该临时副本创建Workbook对象。但是,我想创建Workbook对象而不创建它的副本

<form action="UploadDownloadFileServlet" method="post" enctype="multipart/form-data">
    Select File to Upload:<input type="file" name="fileName"><br>
    <input type="submit" value="Upload"/>
</form>

doPost()代码段

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    if (!ServletFileUpload.isMultipartContent(request)) {
        throw new ServletException("Content type is not multipart/form-data");
    }

    PrintWriter out = response.getWriter();
    try {
        List<FileItem> fileItemsList = uploader.parseRequest(request);

        FileItem fileItem = fileItemsList.get(0);
        System.out.println("FieldName=" + fileItem.getFieldName());
        System.out.println("FileName=" + fileItem.getName());
        System.out.println("ContentType=" + fileItem.getContentType());
        System.out.println("Size in bytes=" + fileItem.getSize());
        File file = new File(File.separator + fileItem.getName());

        System.out.println("Absolute Path at server=" + file.getAbsolutePath());
        fileItem.write(file);
        FileInputStream inputStream = new FileInputStream(file);
        Workbook workbook = getWorkbook(inputStream, file.getAbsolutePath());
    } catch (Exception e) {
        e.printStackTrace();
    }

}

听众类

@WebListener
public class FileLocationContextListener implements ServletContextListener {

    public void contextInitialized(ServletContextEvent servletContextEvent) {
        String rootPath = System.getProperty("catalina.home");
        ServletContext ctx = servletContextEvent.getServletContext();
        String relativePath = ctx.getInitParameter("tempfile.dir");
        File file = new File(rootPath + File.separator + relativePath);
        if(!file.exists()) file.mkdirs();
        System.out.println("File Directory created to be used for storing files");
        ctx.setAttribute("FILES_DIR_FILE", file);
        ctx.setAttribute("FILES_DIR", rootPath + File.separator + relativePath);
    }

    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        //do cleanup if needed
    }

}

2 个答案:

答案 0 :(得分:1)

最后经过一些研究......我能够实现我的目标......

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,  IOException {
if (!ServletFileUpload.isMultipartContent(request)) {
    throw new ServletException("Content type is not multipart/form-data");
}

PrintWriter out = response.getWriter();
try {
    List<FileItem> fileItemsList = uploader.parseRequest(request);

    FileItem fileItem = fileItemsList.get(0);
    System.out.println("FieldName=" + fileItem.getFieldName());
    System.out.println("FileName=" + fileItem.getName());
    System.out.println("ContentType=" + fileItem.getContentType());
    System.out.println("Size in bytes=" + fileItem.getSize());
    InputStream inputStream=fileItem.getInputStream();
            Workbook workbook;
            if (fileItem.getName().endsWith("xlsx")) {
                workbook = new XSSFWorkbook(inputStream);
            } else if (fileItem.getName().endsWith("xls")) {
                workbook = new HSSFWorkbook(inputStream);
            } else {
                throw new IllegalArgumentException("The specified file is not Excel file");
            }

    } catch (Exception e) {
    e.printStackTrace();
    }

}

答案 1 :(得分:0)

试试这个

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,  IOException {
    if (!ServletFileUpload.isMultipartContent(request)) {
        throw new ServletException("Content type is not multipart/form-data");
    }

    PrintWriter out = response.getWriter();
    try {
        List<FileItem> fileItemsList = uploader.parseRequest(request);

        FileItem fileItem = fileItemsList.get(0);
        System.out.println("FieldName=" + fileItem.getFieldName());
        System.out.println("FileName=" + fileItem.getName());
        System.out.println("ContentType=" + fileItem.getContentType());
        System.out.println("Size in bytes=" + fileItem.getSize());
        // Changes here
        Workbook workbook = new HSSFWorkbook(); // implement your getWorkbook without arguments

        CreationHelper createHelper = workbook.getCreationHelper();
        Sheet sheet = workbook.createSheet("new sheet");

        // Create a row and put some cells in it. Rows are 0 based.
        Row row = sheet.createRow((short)0);
        // Create a cell and put a value in it.
        Cell cell = row.createCell(0);
        cell.setCellValue(1);

        // Or do it on one line.
        row.createCell(1).setCellValue(1.2);
        row.createCell(2).setCellValue(createHelper.createRichTextString("This is a string"));
        row.createCell(3).setCellValue(true);

        FileOutputStream fileOut = new FileOutputStream(File.separator + fileItem.getName());
        workbook.write(fileOut);
        fileOut.close();
        // Changes end here
    } catch (Exception e) {
        e.printStackTrace();
    }

}

这是基于ApachePoi网页的示例。