java实现将文件上传到ftp服务器的方法
本文实例讲述了java实现将文件上传到ftp服务器的方法。分享给大家供大家参考,具体如下:
工具类:
packagecom.fz.common.util; importjava.io.DataInputStream; importjava.io.DataOutputStream; importjava.io.FileInputStream; importjava.io.FileNotFoundException; importjava.io.FileOutputStream; importjava.io.IOException; importjava.io.InputStream; importjava.text.SimpleDateFormat; importjava.util.Date; importorg.apache.commons.net.ftp.FTPClient; importorg.apache.commons.net.ftp.FTPReply; publicclassFileUtil{ /** * *@dateSep26,201110:17:39AM *@return *@authorzhangh */ publicstaticDataInputStreamgetInput(){ DataInputStreamd=null; try{ d=newDataInputStream(newFileInputStream("c:/wmc.dat")); returnd; }catch(FileNotFoundExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } returnd; } /** * *@dateSep26,201110:17:44AM *@paramwhites *@return *@authorzhangh */ publicstaticbooleancreatWhiteManageFile(byte[]whites,Stringfile){ DataOutputStreamd; try{ d=newDataOutputStream(newFileOutputStream(file)); d.write(whites); d.flush(); }catch(Exceptione){ //TODOAuto-generatedcatchblock returnfalse; //e.printStackTrace(); } returntrue; } /** * *@dateSep16,20114:39:22PM *@paramurl *@paramusername *@parampassword *@parampath *@paramfilename *@paraminput *@return *@authorzhangh */ publicstaticbooleanuploadFile(Stringurl,Stringusername, Stringpassword,Stringpath,Stringfilename,InputStreaminput){ booleansuccess=false; FTPClientftp=newFTPClient(); try{ intreply; ftp.connect(url); //ftp.connect(url,port);//连接FTP服务器 //如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器 ftp.login(username,password);//登录 reply=ftp.getReplyCode(); if(!FTPReply.isPositiveCompletion(reply)){ ftp.disconnect(); returnsuccess; } ftp.changeWorkingDirectory(path); ftp.storeFile(filename,input); ftp.logout(); input.close(); success=true; }catch(IOExceptione){ e.printStackTrace(); }finally{ if(ftp.isConnected()){ try{ ftp.disconnect(); }catch(IOExceptionioe){ } } } returnsuccess; } /** * *方法名称:uploadFileFtp *方法描述:黑名名单,黑用户文件上传ftp服务器 *@paramurl *@paramusername *@parampassword *@parampath *@paramfilename *@paraminput *@paraminput2 *@return *boolean *version1.0 *authorwuxq *Oct26,20113:19:09PM */ publicstaticbooleanuploadFileFtp(Stringurl,Stringusername, Stringpassword,Stringpath,Stringfilename,InputStreaminput, InputStreaminput2){ Datedate=newDate(); SimpleDateFormatformatter=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss"); Stringtime=formatter.format(date); booleansuccess=false; FTPClientftp=newFTPClient(); try{ intreply; ftp.connect(url); ftp.login(username,password);//登录 reply=ftp.getReplyCode(); if(!FTPReply.isPositiveCompletion(reply)){ ftp.disconnect(); returnsuccess; } ftp.changeWorkingDirectory(path); ftp.storeFile(filename,input); ftp.storeFile(filename+time,input2); ftp.logout(); input.close(); success=true; }catch(IOExceptione){ e.printStackTrace(); }finally{ if(ftp.isConnected()){ try{ ftp.disconnect(); }catch(IOExceptionioe){ } } } returnsuccess; } }
读取配置文件:
packagecom.fz.fzbike.domain; importjava.io.BufferedInputStream; importjava.io.FileInputStream; importjava.io.IOException; importjava.io.InputStream; importjava.util.Properties; importorg.apache.log4j.Logger; importcom.eNets.framework.util.SysConstants; /** *获取ftp服务器信息的bean类 * *@authorwuxq * */ publicclassSysConstats{ privatestaticLoggerlog=Logger.getLogger(SysConstats.class); publicstaticStringFTPSERVER;//ftp服务器ip地址 publicstaticStringFTPUSERNAME;//ftp服务器用户名 publicstaticStringFTPPASSWORD;//ftp服务器用户密码 publicstaticStringENVELOPERESULTROOT;//存放ftp服务器的路径 publicSysConstats(){ try{ InputStreamin=newBufferedInputStream(newFileInputStream( SysConstants.PUBLIC_PATH.substring(0, SysConstants.PUBLIC_PATH.length()-7) +"/bidfileconfig.properties")); Propertiesprop=newProperties(); prop.load(in); SysConstats.FTPSERVER=prop.getProperty("ftpServer","none"); SysConstats.FTPUSERNAME=prop.getProperty("ftpUserName","none"); SysConstats.FTPPASSWORD=prop.getProperty("ftpPassword","none"); SysConstats.ENVELOPERESULTROOT=prop.getProperty( "envelopeResultRoot","none"); log.debug("读取ftp配置信息成功!"); }catch(IOExceptione){ log.debug("读取ftp配置信息失败!"); e.printStackTrace(); } } publicstaticStringgetFTPSERVER(){ returnFTPSERVER; } publicstaticvoidsetFTPSERVER(Stringftpserver){ FTPSERVER=ftpserver; } publicstaticStringgetFTPUSERNAME(){ returnFTPUSERNAME; } publicstaticvoidsetFTPUSERNAME(Stringftpusername){ FTPUSERNAME=ftpusername; } publicstaticStringgetFTPPASSWORD(){ returnFTPPASSWORD; } publicstaticvoidsetFTPPASSWORD(Stringftppassword){ FTPPASSWORD=ftppassword; } publicstaticStringgetENVELOPERESULTROOT(){ returnENVELOPERESULTROOT; } publicstaticvoidsetENVELOPERESULTROOT(Stringenveloperesultroot){ ENVELOPERESULTROOT=enveloperesultroot; } publicstaticvoidmain(Stringargs[]){ newSysConstats(); } }
将文件上传ftp:
packagecom.fz.fzbike.biz; importjava.io.BufferedInputStream; importjava.io.ByteArrayOutputStream; importjava.io.DataOutputStream; importjava.io.FileInputStream; importjava.io.FileNotFoundException; importjava.io.IOException; importjava.io.InputStream; importjava.text.DecimalFormat; importcom.eNets.basesys.user.vo.UserVO; importcom.eNets.framework.assemble.RequestHashNew; importcom.eNets.framework.database.DBConnection; importcom.fz.common.util.FileUtil; importcom.fz.fzbike.common.StringUtil; importcom.fz.fzbike.domain.SysConstats; /** *上传卡内码到ftp服务器生成bat文件 * *@authorwuxq2011-09-28 */ publicclassUploadCardInNoFtpAction{ /** * *方法名称:uploadFtp方法描述:上传文件到ftp * *@paramreh *voidversion1.0authorwuxqSep28,201110:38:38AM */ publicvoiduploadFtp(RequestHashNewreh){ StringcardType=reh.get("cardType").toString(); DBConnectiondbc=reh.getDBC();//链接数据库 dbc.endTran(); //判断是否是空值空有可能是挂失,退出挂失,退出黑名单,根据卡id得到卡类型 if(StringUtil.isNull(cardType)){ Stringcardtypesql="selectci.card_typefromlc_t_card_infociwhereci.card_id=" +reh.get("SELECTEDID"); cardType=dbc.getList0(cardtypesql); } Stringtop="c:/upload/"; Stringfile=top+"bmc.dat";//定义一个目录存放临时的黑名单bat文件 StringwhiteFile=top+"wmc.dat";//定义一个目录存放临时的白名单bat文件 Stringbuserfile=top+"buser.dat";//定义一个目录存放临时的黑用户文件 StringfileID=dbc.setOracleGlideValue("LC_T_UPGRADE_FILE");//得到文件表的序列号 //得到当前用户的ID UserVOuserVo=reh.getUserVO(); StringUserID=userVo.getUserID(); DecimalFormatdf=newDecimalFormat("0.0"); if(cardType.equals("7")){ StringBufferbf=newStringBuffer(1024); bf .append( "selectdistinctcard_in_nofrom(selecttc.card_in_no") .append( "fromlc_t_blacklisttbleftjoinlc_t_card_infotc") .append( "ontb.card_id=tc.card_idwheretc.card_type=7") .append("andtb.whether_effective=1unionallselect") .append("tc.card_in_nofromlc_t_card_lossclleftjoin") .append( "lc_t_card_infotconcl.card_id=tc.card_idwheretc.card_type=7and") .append("cl.whether_effective=1)torderbyt.card_in_no");//黑名单及挂失记录表中所有的管理员记录 StringBufferbffer=newStringBuffer(1024); bffer .append("selectti.card_in_nofromlc_t_card_infoti") .append( "whereti.card_type=7andti.card_make_status=2orderbyti.card_in_no");//卡信息表中所有的管理员记录 //定义一个数组来接收黑名单中排序好的管理员卡内码 Stringarr[][]=dbc.getArr(bf.toString()); //定义一个数组来接收卡信息表中排序好的管理员卡内码 Stringlistarr[][]=dbc.getArr(bffer.toString()); upload_f(arr,file); //得到黑名单bat文件的版本号,初始值为1.0 StringvesionSql="selectfile_vesionfrom(selectrow_number()over(ORDERBYt.file_vesionDESC)num," +"t.file_vesionfromlc_t_upgrade_filetwheret.file_type=2)wherenum=1"; Stringvesion=dbc.getList0(vesionSql); doubleve=1.0;//定义黑名单版本编号变量,初始值为1.0 /* *数据库中存在旧版本则在版本增加0.1 */ if(StringUtil.isNotNull(vesion)){ ve=(Double.parseDouble(vesion)+0.1); } vesion=df.format(ve); //版本记录sql语句 Stringbmcsql="insertintolc_t_upgrade_filevalues("+fileID +",'"+file+"','"+vesion+"','2',sysdate,"+UserID +")"; dbc.insertDB(bmcsql);//持久化到数据库 upload_f(listarr,whiteFile); //得到白名单bat文件的版本号,初始值为1.0 StringvesionSql2="selectfile_vesionfrom(selectrow_number()over(ORDERBYt.file_vesionDESC)num," +"t.file_vesionfromlc_t_upgrade_filetwheret.file_type=5)wherenum=1"; Stringvesion2=dbc.getList0(vesionSql2); doubleve2=1.0;//定义白名单版本编号变量,初始值为1.0 /* *数据库中存在旧版本则在版本增加0.1 */ if(StringUtil.isNotNull(vesion2)){ ve2=(Double.parseDouble(vesion2)+0.1); } StringbfileID=dbc.setOracleGlideValue("LC_T_UPGRADE_FILE");//得到文件表的序列号 vesion2=df.format(ve2); //版本记录sql语句 Stringbmcsql2="insertintolc_t_upgrade_filevalues("+bfileID +",'"+whiteFile+"','"+vesion2+"','5',sysdate," +UserID+")"; dbc.insertDB(bmcsql2);//持久化到数据库 }else{ StringBufferbf2=newStringBuffer(1024); bf2 .append( "selectdistinctcard_in_nofrom(selecttc.card_in_no") .append( "fromlc_t_blacklisttbleftjoinlc_t_card_infotc") .append( "ontb.card_id=tc.card_idwheretc.card_type<>7") .append("andtb.whether_effective=1unionallselect") .append("tc.card_in_nofromlc_t_card_lossclleftjoin") .append("lc_t_card_infotconcl.card_id=tc.card_id") .append("wheretc.card_type<>7andcl.whether_effective") .append("=1)torderbyt.card_in_no");//黑名单表及挂失用户表中所有非管理员记录 //定义一个数组来接收黑用户中排序好的用户卡内码 Stringarr2[][]=dbc.getArr(bf2.toString()); upload_f(arr2,buserfile); //得到黑用户bat文件的版本号,初始值为1.0 StringhuserSql="selectfile_vesionfrom(selectrow_number()over(ORDERBYt.file_vesionDESC)num," +"t.file_vesionfromlc_t_upgrade_filetwheret.file_type=4)wherenum=1"; Stringvesion3=dbc.getList0(huserSql); doubleves=1.0;//定义黑用户版本编号变量,初始值为1.0 /* *数据库中存在旧版本则在版本增加0.1 */ if(StringUtil.isNotNull(vesion3)){ ves=(Double.parseDouble(vesion3)+0.1); } vesion3=df.format(ves); //版本记录sql语句 Stringhusersql="insertintolc_t_upgrade_filevalues("+fileID +",'"+buserfile+"','"+vesion3+"','4',sysdate," +UserID+")"; dbc.insertDB(husersql);//持久化到数据库 } } /** * *方法名称:writeLong方法描述:向输出流中写长整型 * *@paraminput *@returnbyte[]version1.0authorwuxqSep28,201110:54:58AM */ publicstaticbyte[]writeLong(longinput){ ByteArrayOutputStreambaos=newByteArrayOutputStream(); DataOutputStreamos=newDataOutputStream(baos); try{ os.writeLong(Long.reverseBytes(input)); }catch(IOExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } byte[]b=baos.toByteArray(); returnb; } /** * *方法名称:upload_f方法描述:把文件上传到ftp服务器 * *@paramarr *@paramfile *voidversion1.0authorwuxqOct8,201111:37:27AM */ publicstaticvoidupload_f(String[][]arr,Stringfile){ byteby[]=null; byte[]result=newbyte[1]; if(StringUtil.isNotNull(arr)){ result=newbyte[arr.length*4]; intposition=0; for(inti=0;i<arr.length;i++){ by=writeLong(Long.parseLong(arr[i][0])); bytelist[]=newbyte[4]; for(inth=0;h<list.length;h++){ list[h]=by[h]; } for(intg=position;g<position+4;g++){ result[g]=list[g-4*i]; } position=position+4; } } booleanbool=FileUtil.creatWhiteManageFile(result,file);//创建一个bat文件 if(bool){ //InputStreamReaderisr=newInputStreamReader(new //FileInputStream(file)); InputStreaminp=null; InputStreaminp2=null; try{ inp=newBufferedInputStream(newFileInputStream(file)); inp2=newBufferedInputStream(newFileInputStream(file)); }catch(FileNotFoundExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } //截取文件名 Stringf=file.substring(10,file.length()); //获取ftp配置信息 SysConstatssc=newSysConstats(); FileUtil.uploadFileFtp(sc.FTPSERVER,sc.FTPUSERNAME, sc.FTPPASSWORD,sc.ENVELOPERESULTROOT,f,inp,inp2); } } }
更多关于java相关内容感兴趣的读者可查看本站专题:《Java文件与目录操作技巧汇总》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》和《Java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。