java中实现ftp

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1、sun.netimportsun.net.ftp.*;importsun.net.*;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.ByteArrayOutputStream;importjava.util.ArrayList;importjava.util.StringTokenizer;/**FTP远程命令列表brUSERPORTRETRALLODELESITEXMKDCDUPFEATbrPASSPASVSTORRESTCWDSTATRMDXCUPOPTSbrACCTTYPEAPPERNFRXCWDHELPXRMDSTOUAUTHbrREINSTRUSMNTRNTOLISTNOOPPWDSIZEPBSZbrQUITMODESYSTABORNLSTMKDXPWDMDTMPROTbr在服务器上执行命令,如果用sendServer来执行远程命令(不能执行本地FTP命令)的话,所有FTP命令都要加上\r\nbrftpclient.sendServer(XMKD/test/bb\r\n);//执行服务器上的FTP命令brftpclient.readServerResponse一定要在sendServer后调用brnameList(/test)获取指目录下的文件列表brXMKD建立目录,当目录存在的情况下再次创建目录时报错brXRMD删除目录brDELE删除文件br*pTitle:使用JAVA操作FTP服务器(FTP客户端)/p*pDescription:上传文件的类型及文件大小都放到调用此类的方法中去检测,比如放到前台JAVASCRIPT中去检测等*针对FTP中的所有调用使用到文件名的地方请使用完整的路径名(绝对路径开始)。*/p*pCopyright:Copyright(c)2005/p*pCompany:静靖工作室/p*@author欧朝敬13873195792*@version1.0*/publicclassFtpUpfile{privateFtpClientftpclient;privateStringipAddress;privateintipPort;privateStringuserName;privateStringPassWord;/***构造函数*@paramipString机器IP*@paramportString机器FTP端口号*@paramusernameStringFTP用户名*@parampasswordStringFTP密码*@throwsException*/publicFtpUpfile(Stringip,intport,Stringusername,Stringpassword)throwsException{ipAddress=newString(ip);ipPort=port;ftpclient=newFtpClient(ipAddress,ipPort);//ftpclient=newFtpClient(ipAddress);userName=newString(username);PassWord=newString(password);}/***构造函数*@paramipString机器IP,默认端口为21*@paramusernameStringFTP用户名*@parampasswordStringFTP密码*@throwsException*/publicFtpUpfile(Stringip,Stringusername,Stringpassword)throwsException{ipAddress=newString(ip);ipPort=21;ftpclient=newFtpClient(ipAddress,ipPort);//ftpclient=newFtpClient(ipAddress);userName=newString(username);PassWord=newString(password);}/***登录FTP服务器*@throwsException*/publicvoidlogin()throwsException{ftpclient.login(userName,PassWord);}/***退出FTP服务器*@throwsException*/publicvoidlogout()throwsException{//用ftpclient.closeServer()断开FTP出错时用下更语句退出ftpclient.sendServer(QUIT\r\n);intreply=ftpclient.readServerResponse();//取得服务器的返回信息}/***在FTP服务器上建立指定的目录,当目录已经存在的情下不会影响目录下的文件,这样用以判断FTP*上传文件时保证目录的存在目录格式必须以/根目录开头*@parampathListString*@throwsException*/publicvoidbuildList(StringpathList)throwsException{ftpclient.ascii();StringTokenizers=newStringTokenizer(pathList,/);//signintcount=s.countTokens();StringpathName=;while(s.hasMoreElements()){pathName=pathName+/+(String)s.nextElement();try{ftpclient.sendServer(XMKD+pathName+\r\n);}catch(Exceptione){e=null;}intreply=ftpclient.readServerResponse();}ftpclient.binary();}/***取得指定目录下的所有文件名,不包括目录名称*分析nameList得到的输入流中的数,得到指定目录下的所有文件名*@paramfullPathString*@returnArrayList*@throwsException*/publicArrayListfileNames(StringfullPath)throwsException{ftpclient.ascii();//注意,使用字符模式TelnetInputStreamlist=ftpclient.nameList(fullPath);byte[]names=newbyte[2048];intbufsize=0;bufsize=list.read(names,0,names.length);//从流中读取list.close();ArrayListnamesList=newArrayList();inti=0;intj=0;while(ibufsize/*names.length*/){//charbc=(char)names;//System.out.println(i++bc+:+(int)names);//i=i+1;if(names[i]==10){//字符模式为10,二进制模式为13//文件名在数据中开始下标为j,i-j为文件名的长度,文件名在数据中的结束下标为i-1//System.out.write(names,j,i-j);//System.out.println(j++i++(i-j));StringtempName=newString(names,j,i-j);namesList.add(tempName);//System.out.println(temp);//处理代码处//j=i+2;//上一次位置二进制模式j=i+1;//上一次位置字符模式}i=i+1;}returnnamesList;}/***上传文件到FTP服务器,destination路径以FTP服务器的/开始,带文件名、*上传文件只能使用二进制模式,当文件存在时再次上传则会覆盖*@paramsourceString*@paramdestinationString*@throwsException*/publicvoidupFile(Stringsource,Stringdestination)throwsException{buildList(destination.substring(0,destination.lastIndexOf(/)));ftpclient.binary();//此行代码必须放在buildList之后TelnetOutputStreamftpOut=ftpclient.put(destination);TelnetInputStreamftpIn=newTelnetInputStream(newFileInputStream(source),true);byte[]buf=newbyte[204800];intbufsize=0;while((bufsize=ftpIn.read(buf,0,buf.length))!=-1){ftpOut.write(buf,0,bufsize);}ftpIn.close();ftpOut.close();}/***JSP中的流上传到FTP服务器,*上传文件只能使用二进制模式,当文件存在时再次上传则会覆盖*字节数组做为文件的输入流,此方法适用于JSP中通过*request输入流来直接上传文件在RequestUpload类中调用了此方法,*destination路径以FTP服务器的/开始,带文件名*@paramsourceDatabyte[]*@paramdestinationString*@throwsException*/publicvoidupFile(byte[]sourceData,Stringdestination)throwsException{buildList(destination.substring(0,destination.lastIndexOf(/)));ftpclient.binary();//此行代码必须放在buildList之后TelnetOutputStreamftpOut=ftpclient.put(destination);ftpOut.write(sourceData,0,sourceData.length);//ftpOut.flush();ftpOut.close();}/***从FTP文件服务器上下载文件SourceFileName,到本地destinationFileName*所有的文件名中都要求包括完整的路径名在内*@paramSourceFileNameString*@paramdestinationFileNameString*@throwsException*/publicvoiddownFile(StringSourceFileName,StringdestinationFileName)throwsException{ftpclient.binary();//一定要使用二进制模式TelnetInputStreamftpIn=ftpclient.get(SourceFileName);byte[]buf=newbyte[204800];intbufsize=0;FileOutputStreamftpOut=newFileOutputStream(destinationFileName);while((bufsize=ftpIn.read(buf,0,buf.length))!=-1){ftpOut.write(buf,0,bufsize);}ftpOut.close();ftpIn.close();}/***从FTP文件服务器上下载文件,输出到字节数组中*@paramSourc

1 / 30
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功