i am developing a .xls reader who take .xls file and read that,, and give the output as plain text
but i am facing some problem to get the file path into the servlet … i am using poi.jar to read the .xls file ..
.jsp
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>Upload Form</title>
</head>
<body bgcolor="lightblue">
<table id='table1' align="center" >
<tr>
</tr></table><br/><br/><br/>
<br/>
<table border="1" width="50%" bgcolor="#C2DFFF">
<tr>
<td width="100%">
<form action="writeExcel" method="post" enctype="multipart/form-data">
<h2 align="center">Welcome</h2>
<center>
<input type="file" name="photo"/>
<input type="file" name="hem"/>
<br/><br/>
<input type="submit" value="Save"/>
<input type="button" value="Logout" name="logout" onclick="goToURL();" />
<br/>
<br/>
</center>
</form>
</td>
</tr>
</table>
<br/><br/>
</body>
</html>
.java
import java.io.FileInputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.Vector;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
public class writeExcel extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String fileName = request.getParameter("hem");
Vector dataHolder = ReadCSV(fileName);
printCellDataToConsole(dataHolder);
}
public static Vector ReadCSV(String fileName) {
Vector cellVectorHolder = new Vector();
try {
FileInputStream myInput = new FileInputStream(fileName);
POIFSFileSystem myFileSystem = new POIFSFileSystem(myInput);
HSSFWorkbook myWorkBook = new HSSFWorkbook(myFileSystem);
HSSFSheet mySheet = myWorkBook.getSheetAt(0);
Iterator rowIter = mySheet.rowIterator();
while (rowIter.hasNext()) {
HSSFRow myRow = (HSSFRow) rowIter.next();
Iterator cellIter = myRow.cellIterator();
Vector cellStoreVector = new Vector();
while (cellIter.hasNext()) {
HSSFCell myCell = (HSSFCell) cellIter.next();
cellStoreVector.addElement(myCell);
}
cellVectorHolder.addElement(cellStoreVector);
}
} catch (Exception e) {
e.printStackTrace();
}
return cellVectorHolder;
}
private static void printCellDataToConsole(Vector dataHolder) {
for (int i = 0; i < dataHolder.size(); i++) {
Vector cellStoreVector = (Vector) dataHolder.elementAt(i);
for (int j = 0; j < cellStoreVector.size(); j++) {
HSSFCell myCell = (HSSFCell) cellStoreVector.elementAt(j);
String stringCellValue = myCell.toString();
System.out.print(stringCellValue + "\t");
}
System.out.println();
}
}
}
@AVD : Does fileName represent an absolute path of file/doc? If not then set/obtain real (absolute) path.
@Nitin Sharma: thank you AVD.. when i am using finename=”C:\a.xls” is working fine But i am trying to take path from .jsp through file , it gives only file name not full path
@AVD : You have to save the uploaded file under your web-app root (or subfolder) or use InputStream (Servlet 3.0 Part or Apache fileupload api) object of uploaded file instead of fileName.
@Nitin Sharma : i don’t want to upload file … i just want to get full path of that file ..
@AVD : There is nothing left to say! There is no choice. (Do not save the uploaded file instead use the stream of uploaded file).
@Nitin Sharma: i used that but poi use File class object to read the file.. but Apache fileupload api use FileItem class object to read or get the path of the .xls file… and i am not able to typecast FileItem to File
Take a look at
POIFSFileSystemclass, it takesInputStreamparameter and you may obtain viaFileItem.getInputStream()(Commons upload).