java ftp commonsnet_Java 利用Apache Commons Net 实现 FTP文件上传下载

1 package woxingwosu;2

3 import java.io.BufferedInputStream;4 import java.io.BufferedOutputStream;5 import java.io.FileInputStream;6 import java.io.FileOutputStream;7 import java.io.IOException;8 import java.text.SimpleDateFormat;9 import java.util.Comparator;10 import java.util.Properties;11 import java.util.TreeSet;12 import org.apache.commons.io.FileUtils;13 import org.apache.commons.net.ftp.FTP;14 import org.apache.commons.net.ftp.FTPClient;15 import org.apache.commons.net.ftp.FTPClientConfig;16 import org.apache.commons.net.ftp.FTPFile;17 import org.apache.commons.net.ftp.FTPReply;18

19 /**20 * 其实JDK里面也有支持FTP操作的包【jre/lib下的rt.jar】,但是SUN的DOC里面并没有提供相应文档,21 * 因为这里面的包,不被官方支持,建议不要使用。我们可以使用第三方提供的包apache.commons。22 * apache.commons的包,都有文档,方便使用23 * 另外IBM也有提供一个ftp包,我没有用过,有兴趣的可以去研究一下24 * @commons-net:http://apache.mirror.phpchina.com/commons/net/binaries/commons-net-1.4.1.zip

25 * @jakarta-oro:http://mirror.vmmatrix.net/apache/jakarta/oro/source/jakarta-oro-2.0.8.zip

26 * @commons-io:http://apache.mirror.phpchina.com/commons/io/binaries/commons-io-1.3.2-bin.zip

27 * @author 我行我素28 * @2007-08-0329 */

30 public classMiniFtp {31 private staticString username;32 private staticString password;33 private staticString ip;34 private static intport;35 private static Properties property=null;//配置

36 private static String configFile;//配置文件的路径名

37

38 private static FTPClient ftpClient=null;39 private static SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd hh:mm");40

41 private static final String [] FILE_TYPES={"文件","目录","符号链接","未知类型"};42

43 public static voidmain(String[] args) {44 setConfigFile("woxingwosu.properties");//设置配置文件路径

45 connectServer();46 listAllRemoteFiles();//列出所有文件和目录

47 changeWorkingDirectory("webroot");//进入文件夹webroot

48 listRemoteFiles("*.jsp");//列出webroot目录下所有jsp文件

49 setFileType(FTP.BINARY_FILE_TYPE);//设置传输二进制文件

50 uploadFile("woxingwosu.xml","myfile.xml");//上传文件woxingwosu.xml,重新命名为myfile.xml

51 renameFile("viewDetail.jsp", "newName.jsp");//将文件viewDetail.jsp改名为newName.jsp

52 deleteFile("UpdateData.class");//删除文件UpdateData.class

53 loadFile("UpdateData.java","loadFile.java");//下载文件UpdateData.java,并且重新命名为loadFile.java

54 closeConnect();//关闭连接

55 }56

57 /**58 * 上传文件59 * @param localFilePath--本地文件路径60 * @param newFileName--新的文件名61 */

62 public static voiduploadFile(String localFilePath,String newFileName){63 connectServer();64 //上传文件

65 BufferedInputStream buffIn=null;66 try{67 buffIn=new BufferedInputStream(newFileInputStream(localFilePath));68 ftpClient.storeFile(newFileName, buffIn);69 }catch(Exception e){70 e.printStackTrace();71 }finally{72 try{73 if(buffIn!=null)74 buffIn.close();75 }catch(Exception e){76 e.printStackTrace();77 }78 }79 }80

81 /**82 * 下载文件83 * @param remoteFileName --服务器上的文件名84 * @param localFileName--本地文件名85 */

86 public static voidloadFile(String remoteFileName,String localFileName){87 connectServer();88 //下载文件

89 BufferedOutputStream buffOut=null;90 try{91 buffOut=new BufferedOutputStream(newFileOutputStream(localFileName));92 ftpClient.retrieveFile(remoteFileName, buffOut);93 }catch(Exception e){94 e.printStackTrace();95 }finally{96 try{97 if(buffOut!=null)98 buffOut.close();99 }catch(Exception e){100 e.printStackTrace();101 }102 }103 }104

105 /**106 * 列出服务器上所有文件及目录107 */

108 public static voidlistAllRemoteFiles(){109 listRemoteFiles("*");110 }111

112 /**113 * 列出服务器上文件和目录114 * @param regStr --匹配的正则表达式115 */

116 @SuppressWarnings("unchecked")117 public static voidlistRemoteFiles(String regStr){118 connectServer();119 try{120 FTPFile[] files=ftpClient.listFiles(regStr);121 if(files==null||files.length==0)122 System.out.println("There has not any file!");123 else{124 TreeSet fileTree=newTreeSet(125 newComparator(){126 //先按照文件的类型排序(倒排),然后按文件名顺序排序

127 public intcompare(Object objFile1,Object objFile2){128 if(objFile1==null)129 return -1;130 else if(objFile2==null)131 return 1;132 else{133 FTPFile file1=(FTPFile)objFile1;134 FTPFile file2=(FTPFile)objFile2;135 if(file1.getType()!=file2.getType())136 return file2.getType()-file1.getType();137 else

138 returnfile1.getName().compareTo(file2.getName());139 }140 }141 }142 );143 for(FTPFile file:files)144 fileTree.add(file);145 System.out.printf("%-35s%-10s%15s%15s\n","名称","类型","修改日期","大小");146 for(FTPFile file:fileTree){147 System.out.printf("%-35s%-10s%15s%15s\n",iso8859togbk(file.getName()),FILE_TYPES[file.getType()]148 ,dateFormat.format(file.getTimestamp().getTime()),FileUtils.byteCountToDisplaySize(file.getSize()));149 }150 }151 }catch(Exception e){152 e.printStackTrace();153 }154 }155

156 /**157 * 关闭连接158 */

159 public static voidcloseConnect(){160 try{161 if(ftpClient!=null){162 ftpClient.logout();163 ftpClient.disconnect();164 }165 }catch(Exception e){166 e.printStackTrace();167 }168 }169

170 /**171 * 设置配置文件172 * @param configFile173 */

174 public static voidsetConfigFile(String configFile) {175 MiniFtp.configFile =configFile;176 }177

178 /**179 * 设置传输文件的类型[文本文件或者二进制文件]180 * @param fileType--BINARY_FILE_TYPE、ASCII_FILE_TYPE181 */

182 public static void setFileType(intfileType){183 try{184 connectServer();185 ftpClient.setFileType(fileType);186 }catch(Exception e){187 e.printStackTrace();188 }189 }190

191 /**192 * 扩展使用193 * @return194 */

195 protected staticFTPClient getFtpClient(){196 connectServer();197 returnftpClient;198 }199

200 /**201 * 设置参数202 * @param configFile --参数的配置文件203 */

204 private static voidsetArg(String configFile){205 property=newProperties();206 BufferedInputStream inBuff=null;207 try{208 inBuff=new BufferedInputStream(newFileInputStream(configFile));209 property.load(inBuff);210 username=property.getProperty("username");211 password=property.getProperty("password");212 ip=property.getProperty("ip");213 port=Integer.parseInt(property.getProperty("port"));214 }catch(Exception e){215 e.printStackTrace();216 }finally{217 try{218 if(inBuff!=null)219 inBuff.close();220 }catch(Exception e){221 e.printStackTrace();222 }223 }224 }225

226 /**227 * 连接到服务器228 */

229 public static voidconnectServer() {230 if (ftpClient == null) {231 intreply;232 try{233 setArg(configFile);234 ftpClient=newFTPClient();235 ftpClient.setDefaultPort(port);236 ftpClient.configure(getFtpConfig());237 ftpClient.connect(ip);238 ftpClient.login(username, password);239 ftpClient.setDefaultPort(port);240 System.out.print(ftpClient.getReplyString());241 reply =ftpClient.getReplyCode();242

243 if (!FTPReply.isPositiveCompletion(reply)) {244 ftpClient.disconnect();245 System.err.println("FTP server refused connection.");246 }247 } catch(Exception e) {248 System.err.println("登录ftp服务器【"+ip+"】失败");249 e.printStackTrace();250 }251 }252 }253

254 /**255 * 进入到服务器的某个目录下256 * @param directory257 */

258 public static voidchangeWorkingDirectory(String directory){259 try{260 connectServer();261 ftpClient.changeWorkingDirectory(directory);262 }catch(IOException ioe){263 ioe.printStackTrace();264 }265 }266

267 /**268 * 返回到上一层目录269 */

270 public static voidchangeToParentDirectory(){271 try{272 connectServer();273 ftpClient.changeToParentDirectory();274 }catch(IOException ioe){275 ioe.printStackTrace();276 }277 }278

279 /**280 * 删除文件281 */

282 public static voiddeleteFile(String filename){283 try{284 connectServer();285 ftpClient.deleteFile(filename);286 }catch(IOException ioe){287 ioe.printStackTrace();288 }289 }290

291 /**292 * 重命名文件293 * @param oldFileName --原文件名294 * @param newFileName --新文件名295 */

296 public static voidrenameFile(String oldFileName,String newFileName){297 try{298 connectServer();299 ftpClient.rename(oldFileName, newFileName);300 }catch(IOException ioe){301 ioe.printStackTrace();302 }303 }304

305 /**306 * 设置FTP客服端的配置--一般可以不设置307 * @return308 */

309 private staticFTPClientConfig getFtpConfig(){310 FTPClientConfig ftpConfig=newFTPClientConfig(FTPClientConfig.SYST_UNIX);311 ftpConfig.setServerLanguageCode(FTP.DEFAULT_CONTROL_ENCODING);312 returnftpConfig;313 }314

315 /**316 * 转码[ISO-8859-1 -> GBK]317 *不同的平台需要不同的转码318 * @param obj319 * @return320 */

321 private staticString iso8859togbk(Object obj){322 try{323 if(obj==null)324 return "";325 else

326 return new String(obj.toString().getBytes("iso-8859-1"),"GBK");327 }catch(Exception e){328 return "";329 }330 }331 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值