at java.io.FileInputStream.read(Unknown Source)根据这句话判断文件找不到,那问题就是文件路径不对............你确认下文件路径对不对

解决方案 »

  1.   

    我的文件格式是xls  第一行是用户名  密码就两个
      

  2.   

    你把那个文件路径copy出来,我看看
      

  3.   

     Workbook wb = null;
    wb=new XSSFWorkbook(fi);
    对象不匹配啊,兄弟!
      

  4.   

    Workbook wk = Workbook.getWorkbook(file);
      

  5.   

    你new出来的对象类型是XSSFWorkbook,不是你声明的Workbook;
    就如同你int i = new String();一样..................Workbook 
      

  6.   

    怎么可能,都是poi中的,import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.ss.usermodel.Cell;
    import org.apache.poi.ss.usermodel.Row;
    import org.apache.poi.ss.usermodel.Sheet;
    import org.apache.poi.ss.usermodel.Workbook;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
      

  7.   

    Workbook wk = Workbook.getWorkbook(file);
      

  8.   

    哥哥我用的是poi,没有你这个方法
      

  9.   

    等我吃完饭,再来帮你看看你poi
      

  10.   

    找到原因了...首先确定D:\\teachers.xls这个文件是存在的,然后
    FileInputStream fl = new FileInputStream("D:\\teacher.xls");
    Workbook wb = null;
    try {
      wb = null;
      wb=new HSSFWorkbook(fl);//操作Excel2003的版本,扩展名是.xlsx
      
    } catch (Exception e) {
    wb = null;
      wb = new XSSFWorkbook(fl);//操作Excel2007以前(包括2003)的版本,扩展名是.xls
    }
    就OK了
      

  11.   

    个人认为是最佳方法是:判断文件是什么格式的,就用对应的对象来创建;
    不赞成使用这种报错机制来判断;
    当创建2007excel失败时,Workbook的实例对象的某些信息已经是2007的格式了;这时候如果再去创建2003的话,就行不通了......以上所述纯属个人意见,仅供参考;不得商用,违者必究!
      

  12.   

    我今天也遇到这个问题了 我的代码跟#21的一样 但是我没有在new之前给赋null 我加上了 也有这个问题 然后我看他在#22说的“当创建2007excel失败时,Workbook的实例对象的某些信息已经是2007的格式了” 我反编译poi的HSSFWorkbook看了 不是这样的 是创建失败后就把fl给close了 所以才会出现java.io.IOException: Read error的错误
      

  13.   


    的确是Workbook将inputStream关闭了,所以传参数inputStream是没用的,应传filepath,或者用22楼的方式
      

  14.   

    你说有用,那再试一下传xlsx格式的,其实还是不行,还有,你说的扩展名刚好说反了吧
      

  15.   

    http://blog.csdn.net/awenluck/article/details/40396529   这个里面有2003和2007的数据读取,你看下,我测试过,OK的