j2ee Struts2.0 下的文件上传一些东西

今天做的时候遇到了一个问题,如何从一个 .txt文本 中读取每一行  然后去数据库中进行比对。
刚开始 说真的脑子很乱,就是不知从哪下手。如何读取.txt特别是获取每一行 然后去数据库进行比对。由于没接触过,心里不禁的哆嗦起来,但是我知道自己能解决。下面讲一下我的解决

过程:
首先:我的项目是由SSH  前台的框架是Struts2.0 
刚开始的时候我从网上查找一些关于Struts的资料。很的多网友提到了actionForm去做。
说真的可能我是没有很好的理解Struts1.x与Struts2.x之间的区别,自己对于Struts可以说也是刚接触,很多东西还是处于入门级别。
捕获输入(摘):
Struts1 使用ActionForm对象捕获输入。所有的ActionForm必须继承一个基类。因为其他JavaBean不能用作ActionForm,开发者经 常创建多余的类捕获输入。动态Bean(DynaBeans)可以作 

 为创建传统ActionForm的选择,但是,开发者可能是在重新描述(创建)已经存 在的JavaBean(仍然会导致有冗余的javabean)。
Struts 2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。输入属性可能是有自己(子)属性的rich对象类型。Action属性能够通过 web页面上的taglibs访问。Struts2也支持ActionForm模式。rich对象类型,包括业务对象,能够用作输入/输出对象。这种 ModelDriven 特性简化了taglib对POJO输入对象的引用。
可以看出Struts2.0不需要actionForm 并可以直接把页面的属性值传到对应的action中,当然传的值和属性要匹对。这样并可以了!
例如的我的jsp页面:violateRecord.jsp
 <div id="main">
    <s:form id="uploadform" name="uploadform"  namespace="/membership" action="fileUpload" enctype="multipart/form-data"  method="post">  
     选择要上传的文件 <input type="file" name="myFile" id="myFile" /> <input type="submit" value="上传" /> //enctype="multipart/form-data"  必不可少,少了会报错
     </s:form>
 </div>
我的action类的:FileUploadAction.java
部分代码:
 private File myFile;
public String execute()  {    
     InputStream in=null; 
       try{     
    if(myFile!=null){
    in = new FileInputStream(myFile);//myFile的属性对应了violateRecord.jsp控件的

//  <input type="file" name="myFile" id="myFile" />    
    String memberId=null;
    ViolateRecordDto dto=new ViolateRecordDto();
    BufferedReader   br=new   BufferedReader(new   InputStreamReader(in)); //把上传的文件流转化成BufferedReader用来读取文本    
           String  c=br.readLine(); //BufferedReader 类 BufferedReader 由Reader类扩展而来,提供通用的缓冲方式文本读取,而且提供了很实用的readLine,读取分行文本很适合,   BufferedReader是针对Reader的,不直接针对文件,也不是只针对文件读取
           //while循环读取每一行文本
           while(c!=null){          
             memberId=carService.IsExistCarNo(c);
             if( memberId!=null){              
              dto.setImportDate(new Date());
              dto.setCarNo(c);
              dto.setMemberId(Integer.valueOf(memberId));
              violateRecordService.addViolateRecord(dto);
             }
             c = br.readLine();         
            }    

      }    
          setGoingToURL("/membership/violateRecord.do");//这是我提交完后页面跳转的路径 相应的配置在struts2.0也要配置
       
       }catch(Exception e){
        e.printStackTrace();
       }finally{      
  
       }
        return  SUCCESS;
   }  
配置文件省略。。其实现在看起来 大体上就这样,也不是很难,就像有时候人就困在某地方,急了乱了,冷静下来,会发现事情没有自己想象的那么难。

下面是在对应的Struts2.0中实现文件上传
public String execute()     { 
    String error="";
    String msg = "";
    int height=0,width=0;
       try{
        imageFileName = new Date().getTime() + getExtention(fileName).toLowerCase();//先从getExtention()文件的后扩展名  比如:.txt 新的文件名是以日期为开头的名字
        String result ="";
      
        File imageFile = new File(ServletActionContext.getServletContext().getRealPath( "/upload/temp" ) + "/" + imageFileName);//我的理解是初始化一个要保存的文件的路径  属性为 File 
//同时注意 在struts的propertites中要设置struts.multipart.saveDir=/temp 不然会找到上面的路径的

        copy(myFile, imageFile);//下面是把myFile文件流真正的转化成原本的属性 .txt文本(记住myFile的value值是.temp的结尾说明他不是.txt需要转化成)
      
       }catch(Exception e){
        e.printStackTrace();
       }finally{
      
       try{
        response.setContentType("text/html");
        response.getWriter().flush();
        //response.getWriter().print(imageFileName);
        response.getWriter().write("{ error:'" + error + "',"
               +"height:'" + String.valueOf(height) + "',"
               +"width:'" + String.valueOf(width) + "',"
               +"fileName:'" + imageFileName + "'}");
        response.getWriter().close();
       }catch(Exception e){e.printStackTrace();}
       }
        return Action.SUCCESS;
   }

  private static String getExtention(String fileName) {
        int pos = fileName.lastIndexOf( "." );
        return fileName.substring(pos);
   }

private static void copy(File src, File dst) {
        try {
           InputStream in = null ;
           OutputStream out = null ;
            try {               
               in = new BufferedInputStream( new FileInputStream(src), BUFFER_SIZE);
               out = new BufferedOutputStream( new FileOutputStream(dst), BUFFER_SIZE);
                byte [] buffer = new byte [BUFFER_SIZE];
                while (in.read(buffer) > 0 ) {
                   out.write(buffer);//把in的流的内容相当于写进了out中 即要保存的相应的路径下东东
               }
           }catch(Exception e) {
            throw e;
           }finally {
                if ( null != in) {
                   in.close();
               }
                if ( null != out) {
                   out.close();
               }
           }
       }  catch (Exception e) {
          e.printStackTrace();
       }
   }

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值