Problemmer med Apache POI
Jeg forsøger at hente data fra et Excel regneark som bliver uploadet til min webserver. Upload foregår helt fint og jeg er ret sikker på at path oxo er korrekt, men jeg får denne exception når jeg forsøger at læse Excel regnearket ind i POI.Problemmet er at det virker hvis jeg hardcoder path ind i metoden.
Den path som jeg tager med er:
"path= "C:\\Tomcat\\webapps\\Isaksen\\admin\\update\\0.9022633606827756_pris.xls" (det sjove filnavn er pga. overskrivning i min fil-upload)
Hvis jeg går ind i en dos-prompt er min fulde sti:
"C:\Tomcat\webapps\Isaksen\admin\update"
i det bib ligger filen:
"0.9022633606827756_pris.xls"
(min klasse står under exceptionen)
java.io.IOException: Unable to read entire block; 2 bytes read; expected 512 bytes
at org.apache.poi.poifs.storage.RawDataBlock.<init>(RawDataBlock.java:62)
at org.apache.poi.poifs.storage.RawDataBlockList.<init>(RawDataBlockList.java:51)
at org.apache.poi.poifs.filesystem.POIFSFileSystem.<init>(POIFSFileSystem.java:86)
at maxicom.isaksen.bl.Producent.getName(Producent.java:28)
at org.apache.jsp.admin.UpdatePrice_jsp._jspService(UpdatePrice_jsp.java:67)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
at java.lang.Thread.run(Thread.java:534)
-----------------------------------------------------------------
public class Producent {
public static ArrayList getName(String path){
ArrayList aArray = new ArrayList();
try{
POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(path));
HSSFWorkbook wb = new HSSFWorkbook(fs);
int noOfSheet = wb.getNumberOfSheets();
System.out.println("Antal ark: "+noOfSheet);
HSSFSheet sheet = wb.getSheetAt(0);
int rownum = 1;
for (;;) {
HSSFRow row = sheet.getRow(rownum);
if(row==null) break;
HSSFCell ivcell = row.getCell((short)0);
String iv = (String)ivcell.getStringCellValue();
HSSFCell svcell = row.getCell((short)1);
String sv = svcell.getStringCellValue();
System.out.println(iv + " " + sv);
rownum++;
}
}catch (IOException e){
// TODO Auto-generated catch block
e.printStackTrace();
}
return aArray;
}
}
