第二则java读取excel文件代码

// 得到上传文件的保存目录,将上传的文件存放于WEB-INF目录下,不允许外界直接访问,保证上传文件的安全  
String savePath = this.getServletContext().getRealPath(  
        "/WEB-INF/upload");  
// 上传时生成的临时文件保存目录  
String tempPath = this.getServletContext().getRealPath("/WEB-INF/temp");  
int serverid = 0;  
int sid = 0;  
int gid = 0;  
byte answerLibraryType = 0;  
String className = "";  
String roleName = "";  
boolean bool = true;//判断数据是否正确  
File tmpFile = new File(tempPath);  
StringBuffer str = new StringBuffer();  
if (!tmpFile.exists()) {  
    // 创建临时目录  
    tmpFile.mkdir();  
}  
// 消息提示  
String message = "";  
try {  
  
    // 使用Apache文件上传组件处理文件上传步骤:  
    // 1、创建一个DiskFileItemFactory工厂  
    DiskFileItemFactory factory = new DiskFileItemFactory();  
    factory.setSizeThreshold(1024 * 100);// 设置缓冲区的大小为100KB,如果不指定,那么缓冲区的大小默认是10KB  
    // 设置上传时生成的临时文件的保存目录  
    factory.setRepository(tmpFile);  
    // 2、创建一个文件上传解析器  
    ServletFileUpload upload = new ServletFileUpload(factory);  
    upload.setProgressListener(new ProgressListener() {  
  
        @Override  
        public void update(long pBytesRead, long pContentLength,  
                int arg2) {  
            // TODO Auto-generated method stub  
            System.out.println("文件大小为:" + pContentLength + ",当前已处理:"  
                    + pBytesRead);  
        }  
    });  
    // 解决上传文件名的中文乱码  
    upload.setHeaderEncoding("UTF-8");  
    // 3、判断提交上来的数据是否是上传表单的数据  
    if (!ServletFileUpload.isMultipartContent(request)) {  
        // 按照传统方式获取数据  
        return;  
    }  
    // 设置上传单个文件的大小的最大值,目前是设置为1024*1024字节,也就是1MB  
    upload.setFileSizeMax(1024 * 1024);  
    // 设置上传文件总量的最大值,最大值=同时上传的多个文件的大小的最大值的和,目前设置为10MB  
    upload.setSizeMax(1024 * 1024 * 10);  
    // 4、使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List<FileItem>集合,每一个FileItem对应一个Form表单的输入项  
    @SuppressWarnings("unchecked")  
    List<FileItem> list = upload.parseRequest(request);  
    // 实验添加一个目录到ftp  
    for (FileItem item : list) {  
        // 如果fileitem中封装的是普通输入项的数据  
        if (item.isFormField()) {  
            String name = item.getFieldName();  
            // 解决普通输入项的数据的中文乱码问题  
            String value = item.getString("UTF-8");  
            if (name.equals("serverid")) {  
                serverid = Integer.parseInt(value);  
            }  
            if (name.equals("sid")) {  
                sid = Integer.parseInt(value);  
            }  
            if (name.equals("gid")) {  
                gid = Integer.parseInt(value);  
            }  
            if (name.equals("answerLibraryType")) {  
                answerLibraryType = Byte.parseByte(value);  
            }  
            if (name.equals("className")) {  
                className = value;  
            }  
            if (name.equals("roleName")) {  
                roleName = value;  
            }  
            System.out.println(name + "=" + value);  
        } else {// 如果fileitem中封装的是上传文件  
                // 得到上传的文件名称  
            String filename = item.getName();  
            System.out.println(filename);  
            if (filename == null || filename.trim().equals("")) {  
                continue;  
            }  
            // 注意:不同的浏览器提交的文件名是不一样的,有些浏览器提交上来的文件名是带有路径的,如:  
            // c:a1.txt,而有些只是单纯的文件名,如:1.txt  
            // 处理获取到的上传文件的文件名的路径部分,只保留文件名部分  
            filename = filename  
                    .substring(filename.lastIndexOf("\") + 1);  
            String fileExtName = filename.substring(filename  
                    .lastIndexOf(".") + 1);  
            // 如果需要限制上传的文件类型,那么可以通过文件的扩展名来判断上传的文件类型是否合法  
            System.out.println("上传的文件的扩展名是:" + fileExtName);  
            if(fileExtName=="xls"){  
                message = "上传文件格式错误,请将文件格式转换成xls格式";  
            }else{  
                // 获取item中的上传文件的输入流  
                InputStream is = item.getInputStream();  
                Workbook rwb = Workbook.getWorkbook(is);  
                // 这里有两种方法获取sheet表:名字和下标(从0开始)  
                // Sheet st = rwb.getSheet("original");  
                Sheet st = rwb.getSheet(0);  
                // Sheet的下标是从0开始  
                // 获取第一张Sheet表  
                Sheet rst = rwb.getSheet(0);  
                // 获取Sheet表中所包含的总列数  
                int rsColumns = rst.getColumns();  
                // 获取Sheet表中所包含的总行数  
                int rsRows = rst.getRows();  
                // 获取指定单元格的对象引用  
                for (int i = 0; i < rsRows; i++) {  
                    for (int j = 0; j < rsColumns; j++) {  
                        Cell cell = rst.getCell(j, i);  
                        if(cell.getContents()==null || cell.getContents().length()<1){  
                            message = "该文件第"+(i+1)+"行,第"+(j+1)+"列为空或者有错误!请检查文件,修改之后重新上传!";  
                            bool = false;  
                            break;  
                        }  
                        str.append(cell.getContents()).append("#");  
                    }  
                    str.append("_");  
                    System.out.println(str.toString());  
                }  
                // 关闭  
                rwb.close();  
                // 删除处理文件上传时生成的临时文件  
                item.delete();  
                if(!bool){  
                    break;  
                }  
            }  
        }  
    }  
} catch (Exception e) {  
    e.printStackTrace();  
}  

上述需要的jar包  :jxl.jar

jsp标签:

 
<table  class="item" id="items">  
        <tr  class="info">  
            <td colspan ="1">  
                <label>上传答题</label>  
            </td>  
            <td colspan ="1">  
                <input type="file" name="file[1]" id="fileid"/>   
            </td>  
        </tr>  
    </table>  
原文地址:https://www.cnblogs.com/pegasus827/p/9175109.html