源码如下:
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)

解决方案 »

  1.   

    文件路径没问题啊,都能生成File对像,File f=new File(workFielUrl);这个语句都没有错
      

  2.   

    文件不存在。
    你可以试试。
    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实例而已。
      

  3.   

    谢谢,file.exists()为true. 我跟了jexcel的原码,出错是在wordbook.java的下面的方法里
     public static Workbook getWorkbook(java.io.File file)
        throws IOException, BiffException
      {
     return getWorkbook(file,new WorkbookSettings());
      }里,而这方法出错是因为new WorkbookSettings()这个方法出错,异常为NoClassDefFoundError,好像没有创建成功.有对jexcel感兴趣的可以进去看一看.
      

  4.   

    必须手动创建那个File文件
      

  5.   

    跟进去看了一下:public static Workbook getWorkbook(InputStream is)
            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,那么就会抛这个异常。
      

  6.   


    我也遇到了同样的问题,把文件以流形式读进来,read返回0,但是仍然抛出异常,快疯了....
      

  7.   

    给出我的一点建议
    虽说不是所有人都跟我一样傻,但总归是一个思路.
    由于特殊原因,我用这个inputstream得到两个workbook,然后就悲剧了,
    找半天没找到,后来被人找到,用一个xls文件得到的inputstream只能得到一个workbook