读取excel文件时出现FileNotFoundexception

场景:我正在尝试使用JExcel读取Excel文件并将数据转储到Or​​acle数据库中。 我要求用户浏览并select一个文件从系统中读取,然后读取数据并将数据(不保存物理文件)转储到Or​​acle数据库中。

<form id='uploadform'> <table class='detailTable'> <tr> <td class='detailTableTD'>Select File to Upload:</td> <td class='detailTableTD'> <input type='file' id='fileUpload'> </td> </tr> <tr> <td class='detailTableTD'></td> <td class='detailTableTD'> <button id='uploadBtn' onclick="upload();">Upload</button> <button id='backBtn'>Back</button> </td> </tr> </table> </form> 

Java的:

 public int[][] readFromExcel(final String excelFilePath) throws ApplicationException { String excelPath = excelFilePath.trim(); File inputWorkbook = new File(excelPath); Workbook workbook; MyObj drawBk; List drBkLst = new ArrayList(); String tmpStr = ""; try { workbook = Workbook.getWorkbook(inputWorkbook); Sheet sheet = workbook.getSheet(0); for (int j = 1; j < sheet.getRows(); j++) { drawBk = new MyObj(); for (int i = 0; i < sheet.getColumns(); i++) { Cell cell = sheet.getCell(i, j); switch (i) { case 0: drawBk.setSerialNumber(cell.getContents()); break; case 1: drawBk.setMediaNumber(cell.getContents()); break; case 2: tmpStr = cell.getContents(); if (!(tmpStr.trim().equalsIgnoreCase("Y") || tmpStr.trim().equalsIgnoreCase("N"))) continue; else drawBk.setMnProcessInd(tmpStr); drawBk.setSnProcessInd(tmpStr); break; } } drawBk.setLastChangedUser(userId); drBkLst.add(drawBk); } } catch (Exception readExcelEx) {} return insertExcelDataToDatabase(drBkLst); } 

在这里,我捕获path并将其作为parameter passing给处理单元的Java方法,并创build要插入到数据库中的对象的ArrayList。 这里所有简单的代码。 从本地部署运行时,这一切工作正常,但是当我将EAR部署到服务器时,当我浏览文件并select文件时,我开始获取FileNotFoundexception。 我觉得这一切都是由于一些相对/绝对path的问题,但不能debugging,我需要它快。 任何确切的帮助将不胜感激?

谢谢。

您将不得不在您的服务器上的某个临时目录中写入文件。 你不能使用你的系统文件path从服务器(耳)。

您将不得不将表单更改为多部分并处理请求。 看看这个链接(http://www.servletworld.com/servlet-tutorials/servlet-file-upload-example.html)&#x3002;

您可以避免将文件写入临时文件(它将由java写入tmp,不过您不必提供path)。 使用

 FileInputStream fis = new FileInputStream(new File()); //after reading it using file io. Workbook workbook = WorkbookFactory.create(fis); 

我相信,当你在本地运行该文件驻留在本地系统,因此你不会得到任何exception。 但是当你在服务器上部署时,用户浏览的文件仍然在他的机器上,并没有到达服务器。 您需要从文件的请求参数二进制数据创build临时文件或从java对象中读取数据。