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



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

<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
}
}

经过一点点研究,终于.我能够实现我的目标...

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();
}
}

试试这个

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网页上的一个例子。

最新更新