您好我想从我的系统中选择一个文件并创建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
}
}
答案 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网页的示例。