求struts上传xls文件,判断文件每条记录是数字或英文,然用hibernate存入数据库的代码。(三大框架)? 50

急!!!!... 急!!!! 展开
 我来答
198901245631
2013-10-30 · TA获得超过3.5万个赞
知道大有可为答主
回答量:9037
采纳率:92%
帮助的人:1708万
展开全部

这个要做是能实现的,你先解析了你的xls文件,我解析的是两行,第二行是数字才能通过,要不就会返回一个空,这样的情况下,你把那个xls文件做成一个流,返回一个整体的字符串,然后解析一下成为单个的String类型就行了。这个你自己参考一下,我的是在jsp里面运行的,你要是纯java的那就直接写个方法引入个流就行了,研究一两天肯定能行,

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
public class AnalsyXls {
     public String readlsx(InputStream is) { 
       String totalString = "";
       boolean bl = false;
  try {
    
       HSSFWorkbook book = new HSSFWorkbook(is);
         for(int numSheet = 0; numSheet < book.getNumberOfSheets(); numSheet++){
      HSSFSheet xssfSheet = book.getSheetAt(numSheet);
       if(xssfSheet == null){
        continue;
       }
          // 循环行Row   
           for(int rowNum = 0; rowNum <= xssfSheet.getLastRowNum(); rowNum++ ){  
             HSSFRow xssfRow = xssfSheet.getRow( rowNum);  
             if(xssfRow == null){  
               continue;  
             }  
             if(xssfRow.getLastCellNum()==2){  //只允许是两列,如果不符合规则,直接跳出循环报错
              for(int cellNum = 0; cellNum <= xssfRow.getLastCellNum(); cellNum++){  
                 HSSFCell xssfCell = xssfRow.getCell( cellNum);  
                 if(xssfCell == null){  
                    continue;  
               }  
              if(cellNum == 1){
               bl =isNum(getValue(xssfCell));
                 if(bl){//如果这个单元格是数字的话就进行拼串
                totalString += getValue(xssfCell)+":100,";
                  }else{//如果这个单元格不是数字,返回页面报错
                   totalString="";
                   break;
                  }
               }
               else if(cellNum == 0) {
                totalString += getValue(xssfCell)+":";
               }else{
                continue; 
               }
                
            }
              }else{
               totalString="";
                  break;
             }
           // 循环列Cell     
        
            }
       }
   } catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
   return totalString;
  }
  public String getValue(HSSFCell hssfCell){  
       if(hssfCell.getCellType() == hssfCell.CELL_TYPE_BOOLEAN){  
         return String.valueOf( hssfCell.getBooleanCellValue());  
       }else if(hssfCell.getCellType() == hssfCell.CELL_TYPE_NUMERIC){  
         return String.valueOf( hssfCell.getNumericCellValue());  
       }else{  
         return String.valueOf( hssfCell.getStringCellValue());  
       }  
   } 
   
   public static boolean isNum(String str)  {  //一个静态方法,判断你输入的是不是数字
   
    return str.matches("^[-+]?(([0-9]+)([.]([0-9]+))?|([.]([0-9]+))?)$"); 
     }  
 
}
 


--------引入流的一个简单举例

  FileItemFactory factory = new DiskFileItemFactory(); //为该请求创建一个DiskFileItemFactory对象,通过它来解析请求。执行解析后,所有的表单项目都保存在一个List中

  ServletFileUpload upload = new ServletFileUpload(factory);

  List<FileItem> items = upload.parseRequest(request);

  Iterator<FileItem> itr = items.iterator();

  String fieldName ="N";

  while (itr.hasNext()) {  

      FileItem item = (FileItem) itr.next();

 //检查当前项目是普通表单项目还是上传文件

    if(item.isFormField()){ //如果是普通表单项目,显示表单内容

      fieldName = item.getFieldName();

    } else { //如果是上传文件,显示文件名

       String fileName=item.getName();

       InputStream  is=  item.getInputStream();

       String totalString=null;

      if(fileName.lastIndexOf(".xlsx")>0) {

           AnalsyXlsx a =new AnalsyXlsx(); //filePath= filePath.replaceAll("
\\\\
", "
\\\\\\\\
");替换文件中的路径

           totalString =a.readXlsx(is);

           //解析xlsx文件

           if(totalString!=""){

            rm.setCommon(totalString); // 进行数据库的申请写入  

            right="上传文件成功!等待审核!";

           }else{

            worry="<script type='text/javascript' >alert('您上传的文件不符合规则,请认真核对后再上传!');</script>";

           }

          

      }else{

        AnalsyXls lsx= new AnalsyXls();

        totalString =lsx.readlsx(is);

        //解析xls文件

        if(totalString!=""){

            rm.setCommon(totalString); // 进行数据库的申请写入  

            right="上传文件成功!等待审核!";

        }else{

         worry="<script type='text/javascript' >alert('您上传的文件不符合规则,请认真核对后再上传!');</script>";

           }

       }

        }

       }
百度网友841c287
2013-10-27
知道答主
回答量:20
采纳率:0%
帮助的人:21.4万
展开全部
xls文件做不到的吧? 如果是.csv倒是有可能,.csv打开就是Excel 也能被java解析,然后按照你的要求的话应该不需要三大框架,只需要Struts1.2+Hibernate3.0加上jsp+mysql数据库即可,如果怕麻烦也可以用JDBC来完成,如果你做不到的话我可以考虑帮你试试,用Hibernate+Struts来做。
追问
式样书要求要用spring+hibernate+struts一起做的。而且要求用split分开每个属性值判断。不知道能不能做
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式