public class FTPSystem { private FTPClient client = new FTPClient(); private int port; private String ip; private String user; private String pw; private String dirId; private LogFactory log = LogFactory.getLog(); private boolean preConn = false; public FTPSystem(String ip,String user,String pw,int port){ this.port = port; this.ip = ip; this.user = user; this.pw = pw; if(connect()){ preConn = true; } } /** * * 连接服务器 * * @return * @author YitianC * @history * YitianC Oct 28, 2011 5:13:43 PM */ public boolean connect() { synchronized(this){ if(client.isConnected()){ preConn = true; return true; } long startTime = System.currentTimeMillis(); try { client.setTimeOut(2000); client.connect(ip, port); client.login(user, pw); int reply = client.getReplyCode(); if (!FTPReply.isPositiveCompletion(reply)) { client.disconnect(); return false; } preConn = true; return true; } catch (Exception e) { log.printException(null, e); } finally{ log.debug("FTP connection cost time "+(float)(System.currentTimeMillis()-startTime)/1000+" seconds."); } return false; } } public void test(){ FTPFile[] fs = null; try { // fs = this.getFiles(new String("/home/root/listenerDebug/十大二".getBytes("gbk"),"iso-8859-1")); fs = this.getFiles("/home/root/listenerDebug/十大二"); } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); } for(FTPFile f:fs){ try { System.out.println(new String(f.getName().getBytes("iso-8859-1"),"gbk")); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } } try { System.out.println(this.isExist("/home/root/listenerDebug/flex配置文档1.docx")); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } /* try { this.put("d:/listenerDebug/normal/flex配置文档1.docx", "/home/root/listenerDebug"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }*/ //this.get("/home/root/listenerDebug/flex配置文档1.docx", "d:/listenerDebug/normal/flex配置文档1.docx"); } /** * * 上传 * * @param localPath * @param remotePath * @return * @author YitianC * @history * YitianC Oct 26, 2011 12:28:28 PM */ public boolean put(String localPath,String remotePath)throws Exception{ synchronized(this){ if(localPath==null || remotePath==null) return false; File localFile = new File(localPath); if(!localFile.exists()) return false; if(!preConn)return false; if(!connect()){ return false; } if(!mkdir(remotePath)){ System.out.println("无法建立目录 "+remotePath); return false; } String fileName = localFile.getName(); try{ fileName = new String(fileName.getBytes("gbk"),"iso-8859-1"); }catch(Exception e){ } String remoteFile = DirUtil.dirAddFileName(remotePath, fileName); DataInputStream dis =null;; try { client.setFileType(FTPClient.BINARY_FILE_TYPE);// 必须是二进制类型,不然会导致错误 dis= new DataInputStream(new FileInputStream(localFile)); return client.storeFile(remoteFile, dis); } catch (IOException e) { log.printException(null, e); } finally{ if(dis!=null){ dis.close(); } } return false; } } /** * * 下载 * * @param remoteName * @param localPath * @return * @author YitianC * @history * YitianC Oct 26, 2011 12:28:35 PM */ public boolean get(String remoteName,String localPath){ synchronized(this){ if(!preConn)return false; if(!connect()) return false; // 分段读取 DataOutputStream os = null; try { client.setFileType(FTPClient.BINARY_FILE_TYPE);// 必须是二进制类型,不然会导致错误 os = new DataOutputStream(new FileOutputStream(localPath)); return client.retrieveFile(remoteName, os); } catch (Exception e) { e.printStackTrace(); log.printException(null, e); return false; } finally { if (os != null) { try { os.close(); } catch (IOException e) { log.printException(null, e); } } } } } /** * * 根据文件名取得文件大小 * * @param name 文件名 * @return * @author YitianC * @history * YitianC Oct 28, 2011 5:14:33 PM */ public long getFileSize(String name){ FTPFile file = this.getFile(name); if(file == null) return 0; return file.getSize(); } /** * * 取得文件的详细信息 * * @param path 文件路径 * @return * @author YitianC * @history * YitianC Oct 28, 2011 5:15:03 PM */ public FTPFile getFile(String path){ synchronized(this){ if(!preConn)return null; if(!connect()) return null; FTPFile[] f; try{ path = new String(path.getBytes("gbk"),"iso-8859-1"); }catch(Exception e){ } try { f = client.listFiles(path); } catch (Exception e) { log.printException(null, e); return null; } if(f==null){ return null; } else if(f.length==0){ return null; } FTPFile file = f[0]; f = null; return file; } } /** * * 进入FTP目录 相当于cd命令 * * @param path * @return * @author YitianC * @history * YitianC Oct 28, 2011 5:16:22 PM */ public boolean cd(String path){ synchronized(this){ try { if(!preConn)return false; return client.changeWorkingDirectory(path); } catch (IOException e) { log.printException(null, e); } return false; } } /** * * 判断文件或路径是否存在 * * @param path * @return * @author YitianC * @history * YitianC Oct 28, 2011 5:16:47 PM */ public boolean isExist(String path){ synchronized(this){ if(!preConn)return false; FTPFile[] f; String fileName = DirUtil.getLastPathName(path); try{ fileName = new String(fileName.getBytes("gbk"),"iso-8859-1"); }catch(Exception e){ } try { f = client.listFiles(DirUtil.getParentPath(path)); if(f!=null){ for(FTPFile ff:f){ if(ff.getName().equals(fileName)){ return true; } } } } catch (Exception e) { log.printException(null, e); return false; } return false; } } /** * * 取得path目录下的文件列表 * * @param path * @return * @author YitianC * @history * YitianC Oct 28, 2011 5:17:06 PM */ public FTPFile[] getFiles(String path){ synchronized(this){ if(!preConn)return null; if(!connect()) return null; try{ path = new String(path.getBytes("gbk"),"iso-8859-1"); } catch(Exception e){ } try { return client.listFiles(path); } catch (IOException e) { log.printException(null, e); } return null; } } /** * * 移动文件 * * @param path 原路径 * @param newPath 新路径 * @return * @author YitianC * @history * YitianC Oct 28, 2011 5:17:22 PM */ public boolean move(String path,String newPath){ synchronized(this){ if(!preConn)return false; if(!connect())return false; try { return client.rename(path, newPath); } catch (IOException e) { log.printException(null, e); } return false; } } public void printFiles(FTPFile[] files){ synchronized(this){ if(files==null) return; for(FTPFile f:files){ log.debug("name="+f.getName()); } } } /** * * 建立目录 * * @param path * @return * @author YitianC * @history * YitianC Oct 28, 2011 5:18:01 PM */ public boolean mkdir(String path){ synchronized(this){ if(!preConn)return false; if(!connect())return false; if(this.isExist(path))return true; path = this.getEncodePath(path); try { return mkd(path); } catch (Exception e) { log.printException(null, e); return false; } } } public boolean mkd(String path)throws Exception{ synchronized(this){ if(!preConn)return false; if(!connect())return false; if(!this.isExist(path)){ if(!mkd(DirUtil.getParentPath(path))){ return false; } int rt = client.mkd(path); if(this.isExist(path)){ return true; } return false; } return true; } } /** * * 断开连接 * * @return * @author YitianC * @history * YitianC Oct 28, 2011 5:18:19 PM */ public boolean disConnect(){ synchronized(this){ if(!preConn)return true; if(client.isConnected()){ try { client.disconnect(); return true; } catch (IOException e) { log.printException(null, e); return false; } } return true; } } public String getEncodePath(String path){ try { String npath = new String(path.getBytes("utf-8"),"iso-8859-1"); path = npath; } catch (UnsupportedEncodingException e1) { log.printException(null, e1); }catch(Exception e){ log.printException(null, e); } return path; } public boolean rmDir(String path){ synchronized(this){ try{ if(!preConn)return false; path = this.getEncodePath(path); client.rmd(path); }catch(Exception e){ log.printException(null, e); return false; } } return !this.isExist(path); } public boolean rmEmptyDir(String path){ try{ String paDir = DirUtil.getParentPath(path); FTPFile f [] = this.getFiles(path); if(f == null){ return true; } else if(f.length==0){ return true; } else if(f.length==2){ String name1 = f[0].getName(); String name2 = f[1].getName(); if(name2==null||name1==null){ return false; } else{ if((name2.equals(".")&&name1.equals(".."))||(name1.equals(".")&&name2.equals(".."))){ if(!this.rmDir(path)){ return false; } else { return rmEmptyDir(paDir); } } else{ return false; } } } }catch(Exception e){ log.printException(null, e); } return false; } public void release(){ if(disConnect()){ client = null; } } public static void main(String[] args){ FTPSystem f = new FTPSystem("172.19.201.200","weblogic","web123",21); f.test(); } public String getDirId() { return dirId; } public void setDirId(String dirId) { this.dirId = dirId; } public int getPort() { return port; } public void setPort(int port) { this.port = port; } public String getIp() { return ip; } public void setIp(String ip) { this.ip = ip; } public String getUser() { return user; } public void setUser(String user) { this.user = user; } public String getPw() { return pw; } public void setPw(String pw) { this.pw = pw; } public boolean isPreConn() { return preConn; } public void setPreConn(boolean preConn) { this.preConn = preConn; } }
好像这个版本的不支持设置连接超时,所以重写了个
class FTPClient extends org.apache.commons.net.ftp.FTPClient{ private SocketFactory _socketFactory_=SocketFactory.getDefault(); private int timeOut = 2000; public FTPClient(){ } public void connect(InetAddress host, int port) throws SocketException, IOException { _socket_=this._socketFactory_.createSocket(); _socket_.connect(new InetSocketAddress(host, port), timeOut); _connectAction_(); } public void connect(String hostname, int port) throws SocketException, IOException { connect(InetAddress.getByName(hostname), port); } public void setConnTimeOut(int timeOut){ } public int getTimeOut() { return timeOut; } public void setTimeOut(int timeOut) { this.timeOut = timeOut; } }
- commons-net-1.3.0.jar (162.8 KB)
- 下载次数: 1
发表评论
-
java中断线程
2015-05-21 18:29 644Thread.stop方法可能中断线程,但不安全,此方法都 ... -
NIO下载服务器模拟实现(一)
2015-05-21 11:28 0从JDK 1.4开始,Java的标 ... -
java NIO教程
2015-05-18 10:39 0Java NIO提供了与标准IO ... -
Java反射,改变final属性
2015-05-16 16:58 560问: 怎么改变final属性? public cl ... -
直接插入排序
2015-05-09 17:47 558插入排序包括 直接插入排序, 折半插入排序, Shell排序 ... -
曾经的笔试题-- java Cloneable
2015-05-09 10:12 0public class CloneTest { ... -
一个公司的笔试题
2015-05-09 08:02 01.编程题,用两个线程实现对容量为10的队列的加入与取出. ... -
Shell排序
2014-03-26 17:01 0在 -
快速排序
2015-05-09 13:52 362快速排序使用分治法策略来把一个串行分为两个子串行。 步骤 ... -
java 虚拟机加载机制
2014-03-25 10:42 0虚拟机把描述类的数据从class文件加载到内存,并对数据进 ... -
java Class 类
2014-03-25 10:01 0Class对象 是用来创建类的常规对象的,当我们编译一个Ja ... -
成都网丁有限公司面试题
2014-03-24 16:44 0OO OO的原理 值传递与引用传递 ... -
自律编(一) java访问修饰符
2014-03-24 16:23 0一直以为java里只有三种访问修饰符 public, pr ... -
华莱公司笔试
2014-03-12 19:49 0public class Test { publi ... -
sleep与wait
2014-03-03 14:43 0Obj.wait(),与Obj.notify()必须要与syn ... -
线程、进程
2014-03-03 14:39 0线程:程序内部独立运行单位 线程与进程区别: 1 ... -
transient
2014-03-03 13:59 0java语言的关键字,变量修饰符,如果用transient声 ... -
java中关键字volatile的作用
2014-03-03 13:57 0用在多线程,同步变量。 线程为了提高效率,将某成员变量(如A ... -
手机音响(一) java客户端逻辑层
2014-02-17 10:48 0北京科*公司配了一台电脑给我,但没有声音,耳机要连到主机箱 ... -
游戏 压力测试工具
2014-02-14 18:16 0公司让我为游戏做个 压力测试工具 ...
相关推荐
<artifactId>commons-net</artifactId> <version>3.6 ``` 接下来,我们将创建一个名为`FtpHelper`的Java类,用于封装FTP操作。`FtpHelper.java`文件的内容可能如下: ```java import org.apache.commons.net....
FTPClient是这个库中的一个核心类,它封装了与FTP服务器进行交互的大部分功能。以下是从文档内容中提取的知识点: 1. FTPClient类的继承体系:FTPClient类继承自FTP类,并且FTP类继承自SocketClient类, Socket...
9. **头文件和库**:从文件名"requests.h"和"common.h"来看,项目可能使用了自定义的头文件来封装常见的FTP请求和通用功能。此外,可能还使用了标准库如 `<iostream>`、`<string>`、`<vector>` 和 `<sys/socket.h>` ...
在实际使用中,需要确保正确添加了依赖的Apache Commons Net库,即`commons-net-x.x.jar`和`commons-net-ftp-x.x.jar`。在Maven或Gradle项目中,可以通过配置依赖管理来导入这些库。 总的来说,Apache Commons Net...
与FTP不同,SMB使用单一TCP连接进行所有通信,通过封装多个操作在一个会话中,提高了效率。SMB 2.0及更高版本引入了并发、断点续传和加密功能,进一步增强了性能和安全性。 下载远程服务器文件: 使用FTP,你可以...
对于喜欢使用配置文件的用户,Pure-FTPd官方提供了一种解决方案:通过一个封装工具,将配置文件解析并将其转换成命令行参数。首先编辑配置文件pure-ftpd.conf,然后使用以下命令启动: ``` pure-config.pl /etc/pure...
它封装了Windows API,使得开发者能够更容易地创建功能丰富的桌面应用程序,并且支持网络通信。书中可能通过MFC的类库,如CInternetSession、CGopherSession、CHttpSession等,讲解如何进行HTTP、FTP等网络协议的...
- **继承、封装和多态**:OOP 的三大特性,理解它们如何提高代码的复用性和灵活性。 - **异常处理**:使用 try-catch 语句捕获和处理运行时错误。 - **命名空间**:组织代码,避免命名冲突。 2. **ASP.NET 基础*...
- **Symbian API封装**:如何使用Active Objects处理异常和Leaves,以及Mobility APIs的使用。 - **移动扩展**:转换、T-Types、描述符与QString/QByteArray的使用、容器、图像转换等。 #### 五、周五课程议程 - **...
- **OMG (Object Management Group)** 的 CORBA (Common Object Request Broker Architecture)。 - **Sun Microsystems** 的 EJB (Enterprise JavaBeans)。 - **Microsoft** 的 DCOM (Distributed Component Object ...
- 封装:通过访问修饰符(public, private, protected等)实现数据隐藏,保护内部结构不被外部直接访问。 - 继承:子类可以继承父类的属性和方法,实现代码重用。 - 多态:同一方法在不同类中有不同的表现形式,...
5. iSCSI(Internet Small Computer System Interface):将SCSI指令封装在TCP/IP协议中,实现块级存储的网络传输。 三、网络存储架构 1. RAID(Redundant Array of Independent Disks):通过磁盘冗余提高数据...
- .NET Framework不仅仅是一个编程框架,它还是一个生态系统,包含了编译器、库、运行时环境(CLR,Common Language Runtime)以及用于开发和部署应用程序的工具。 - CLR是.NET Framework的核心,负责代码的执行、...
- **类与对象**:C++.NET继承了C++的面向对象特性,包括类的定义、对象的创建、封装、继承和多态。 - **命名空间**:C++.NET引入了命名空间来组织代码,避免命名冲突。 - **模板**:模板允许创建泛型函数和类,...
- 允许执行CGI程序:CGI (Common Gateway Interface) 是一种标准,使Web服务器能够执行服务器上的脚本,从而提供动态内容。 4. **NAT与访问控制** (对应第四题) - NAT(Network Address Translation)用于将私有...
POCO库,全称为“Poor Man's Common C++ Object”,是一个开源的C++类库,旨在为开发跨平台的应用程序提供一套轻量级且强大的工具集。POCO库的设计理念是简单、高效且易于使用,它包含了许多现代软件开发所需的关键...
2. **FTP服务**:FTP(File Transfer Protocol)是一种在Internet上用于文件传输的服务,可以用来下载或上传文件到服务器。 3. **循环队列**:循环队列是一种线性数据结构,队列中元素的个数由队头和队尾指针共同...
- CGI(Common Gateway Interface)模块使得Perl能够处理Web服务器的动态内容生成。 - 更现代的Web框架,如Dancer和Mojolicious,简化了Web应用的开发。 通过这个24小时的Perl编程教程,你将逐步了解并掌握这些...
在开源软件的世界里,Alien-sdl是一个值得关注的项目,它为SBCL(Steel Bank Common Lisp)提供了一个与SDL(Simple DirectMedia Layer)库交互的外部函数接口绑定。本文将深入探讨Alien-sdl的功能、作用以及其在...
实现动态网站的技术包括但不限于CGI (Common Gateway Interface)、ASP (Active Server Pages) 和 PHP (Hypertext Preprocessor)。而HTTP (HyperText Transfer Protocol) 是一种用于传输超文本(如 HTML 文档)的应用...