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程序设计有所帮助。