读取excel文件时出现FileNotFoundException

时间:2012-10-31 10:42:51

标签: java excel upload

场景:我正在尝试使用JExcel读取excel文件并将数据转储到Or​​acle数据库中。我要求用户浏览并选择要从他们的系统读取的文件,然后我读取相同内容并将数据(不保存物理文件)转储到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>

爪哇:

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方法以处理单元格并创建要插入到DB中的对象的ArrayList。这里所有的简单代码。 从本地部署运行时一切正常但是当我将EAR部署到服务器时,当我浏览文件并选择文件时,我开始获取FileNotFound Exception。 我觉得这一切都是由于一些相对/绝对路径问题,但不能调试,我需要快速。任何精确的帮助将不胜感激?

感谢。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

您必须在服务器上的某个临时目录中写入该文件。您无法使用服务器(耳机)的系统文件路径。

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

你也可以避免将文件写入临时文件(无论如何都会用java写入tmp,但你不必提供路径)。使用

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