源码如下:
static final String workFielUrl = "c:/jxlrwtest.xls"; /**
* @param argsb
*/
public static void main(String[] args) {
java.io.OutputStream fou = null;
java.io.InputStream fin = null;
jxl.write.WritableSheet writeSheet = null;
jxl.write.WritableWorkbook writeWB = null;
jxl.Workbook wb = null;
// TODO Auto-generated method stub
try {
fou = new FileOutputStream(workFielUrl);
fin = new FileInputStream(workFielUrl);
File f=new File(workFielUrl);
wb=jxl.Workbook.getWorkbook(fin);
jxl.write.WritableWorkbook copywb=jxl.Workbook.createWorkbook(new File(workFielUrl), wb);
jxl.write.WritableSheet wsheet=copywb.createSheet("abc", 5);
copywb.write();
copywb.close();
在 wb=jxl.Workbook.getWorkbook(fin);时报错
异常如下:
jxl.read.biff.BiffException: The input file was not found
at jxl.read.biff.File.<init>(File.java:124)
at jxl.Workbook.getWorkbook(Workbook.java:268)
at jxl.Workbook.getWorkbook(Workbook.java:253)
at jexcel.JExcelUtil.main(JExcelUtil.java:27)
static final String workFielUrl = "c:/jxlrwtest.xls"; /**
* @param argsb
*/
public static void main(String[] args) {
java.io.OutputStream fou = null;
java.io.InputStream fin = null;
jxl.write.WritableSheet writeSheet = null;
jxl.write.WritableWorkbook writeWB = null;
jxl.Workbook wb = null;
// TODO Auto-generated method stub
try {
fou = new FileOutputStream(workFielUrl);
fin = new FileInputStream(workFielUrl);
File f=new File(workFielUrl);
wb=jxl.Workbook.getWorkbook(fin);
jxl.write.WritableWorkbook copywb=jxl.Workbook.createWorkbook(new File(workFielUrl), wb);
jxl.write.WritableSheet wsheet=copywb.createSheet("abc", 5);
copywb.write();
copywb.close();
在 wb=jxl.Workbook.getWorkbook(fin);时报错
异常如下:
jxl.read.biff.BiffException: The input file was not found
at jxl.read.biff.File.<init>(File.java:124)
at jxl.Workbook.getWorkbook(Workbook.java:268)
at jxl.Workbook.getWorkbook(Workbook.java:253)
at jexcel.JExcelUtil.main(JExcelUtil.java:27)
你可以试试。
File file=new File("d:\\template3333.xls");
if(file.exists()){
System.out.println(" file.exists is "+file.exists());
}else{
System.out.println(" file.exists is "+file.exists());
}能创建File并不是说file已经存在,只是创建了一个File实例而已。
public static Workbook getWorkbook(java.io.File file)
throws IOException, BiffException
{
return getWorkbook(file,new WorkbookSettings());
}里,而这方法出错是因为new WorkbookSettings()这个方法出错,异常为NoClassDefFoundError,好像没有创建成功.有对jexcel感兴趣的可以进去看一看.
throws IOException, BiffException
{
return getWorkbook(is, new WorkbookSettings());
}
public static Workbook getWorkbook(InputStream is, WorkbookSettings ws)
throws IOException, BiffException
{
File dataFile = new File(is, ws);
Workbook workbook = new WorkbookParser(dataFile, ws);
workbook.parse();
return workbook;
}
它会new一个File出来,JXL的file,这个异常就是由file的构造方法抛出来的,file的构造方法如下:public File(InputStream is, WorkbookSettings ws)
throws IOException, BiffException
{
workbookSettings = ws;
initialFileSize = workbookSettings.getInitialFileSize();
arrayGrowSize = workbookSettings.getArrayGrowSize();
byte d[] = new byte[initialFileSize];
int bytesRead = is.read(d);
int pos = bytesRead;
if(Thread.currentThread().isInterrupted())
throw new InterruptedIOException();
while(bytesRead != -1)
{
if(pos >= d.length)
{
byte newArray[] = new byte[d.length + arrayGrowSize];
System.arraycopy(d, 0, newArray, 0, d.length);
d = newArray;
}
bytesRead = is.read(d, pos, d.length - pos);
pos += bytesRead;
if(Thread.currentThread().isInterrupted())
throw new InterruptedIOException();
}
bytesRead = pos + 1;
if(bytesRead == 0)
throw new BiffException(BiffException.excelFileNotFound);
……………………
经调试,在构造方法中,is.read(d)返回-1,导致pos + 1==0,进入抛异常的IF。楼主请确认自己load的文件是不是一个空的文件。如果是空的XLS文件,那么就会抛这个异常。
另外,楼主可以吧new出来的FILE构造一个文件输入流,然后read一把,如果返回1,那么就会抛这个异常。
我也遇到了同样的问题,把文件以流形式读进来,read返回0,但是仍然抛出异常,快疯了....
虽说不是所有人都跟我一样傻,但总归是一个思路.
由于特殊原因,我用这个inputstream得到两个workbook,然后就悲剧了,
找半天没找到,后来被人找到,用一个xls文件得到的inputstream只能得到一个workbook