シナリオ: 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 が発生し始めます。相対/絶対パスの問題が原因だと感じていますが、デバッグできない可能性があり、すぐに必要です。正確なヘルプヘルプをいただければ幸いです。
ありがとう。