场景:我正在尝试使用JExcel读取excel文件并将数据转储到Oracle数据库中。我要求用户浏览并选择要从他们的系统读取的文件,然后我读取相同内容并将数据(不保存物理文件)转储到Oracle数据库中。
<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。 我觉得这一切都是由于一些相对/绝对路径问题,但不能调试,我需要快速。任何精确的帮助将不胜感激?
感谢。
答案 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);