2012-10-31 45 views
0

场景:我正在尝试使用JExcel读取excel文件并将数据转储到Or​​acle数据库中。我要求用户浏览并选择一个文件从他们的系统中读取,然后读取相同的数据并将数据(不保存物理文件)转储到Or​​acle数据库中。FileNotFound读取excel文件时出现异常

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

爪哇:

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

在这里,我捕捉路径和作为参数传递到Java方法用于处理细胞和创建对象的ArrayList的将被插入到DB。这里所有简单的代码。 从本地部署运行时,它都可以正常工作,但是当我将EAR部署到服务器时,当我浏览文件并选择文件时,我开始获取FileNotFound异常。 我觉得这一切都是由于一些相对/绝对路径问题,但无法调试,我需要它很快。任何确切的帮助帮助将不胜感激?

谢谢。

+3

请添加您使用的Java代码。 – 2012-10-31 10:45:01

+0

添加处理表单的代码以及如何在服务器端获取文件会很有用。 – jddsantaella

+0

@Tichodroma添加了阅读excel的Java代码。谢谢。 – axiomtheorem

回答

1

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

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

您可以避免将文件写入临时文件(无论如何它将由tmp写入,但不必提供路径)。使用

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

您能否详细说明我能做些什么。谢谢。 – axiomtheorem

+0

请阅读更新的评论。 – Ankit

+0

您可以分享任何演示如何在处理之前将文件传输到TEMP服务器位置的链接吗? – axiomtheorem

1

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

+1

不,你说得对。您无法直接处理位于服务器上用户计算机上的文件。该文件应该上传到一个临时位置,然后从那里读取 –

+1

现在,根据添加的代码,我会说猜测是正确的。 – jddsantaella

+0

您可以请分享任何演示如何在处理前将文件传输到TEMP服务器位置的链接?谢谢。 – axiomtheorem

相关问题