- 浏览: 44127 次
- 性别:
- 来自: 上海
最新评论
-
wangdgsc:
你好,我最近也在搞这个strutstest,不过遇到了一个问题 ...
使用cactus测试ssh应用(2) -
gsshcl:
(=ω=)哼哼~果然是人老了,看不清了啊~~~~
ubuntu修改tty分辨率
edtFTPj提供了一个简易的构建FTP客户端的方法集合。现在的需求是遍历FTP服务器上的文件,获取文件信息,主要是文件名和文件大小。
一般的想法是使用递归方法遍历。因为文件系统是类似普通树的结构,存在自相似性。不过这样的潜在问题是占用太多内存,每个函数压栈,保存了许多用不到的信息——对于每次函数获取的信息来说,只需要得到文件夹的名字(和当前目录字符串合并可以得到完整的路径),而不需要获得其他信息,所以决定使用stack和循环来模拟这个递归过程。
stack貌似java.util.stack这个类,不过貌似其超类vector名声不怎么好(可能是占用系统空间比较大等原因),java.util.stack成为了一个遗留类。所以需要重新写一个用array或者linkedlist来实现的stack类。
下面采用linkedlist类来实现stack,(模仿stack中的代码写的)。
使用这个stack来保存的主要是压栈的工作目录,其基本工作思路如下:
代码如下,具体测试FTP服务器和用户名密码等信息没有列出。
至此,可以遍历得到FTP下面的目录列表。
需要修改的地方:
等
实际调用代码如下:
记得捕捉错误
一般的想法是使用递归方法遍历。因为文件系统是类似普通树的结构,存在自相似性。不过这样的潜在问题是占用太多内存,每个函数压栈,保存了许多用不到的信息——对于每次函数获取的信息来说,只需要得到文件夹的名字(和当前目录字符串合并可以得到完整的路径),而不需要获得其他信息,所以决定使用stack和循环来模拟这个递归过程。
stack貌似java.util.stack这个类,不过貌似其超类vector名声不怎么好(可能是占用系统空间比较大等原因),java.util.stack成为了一个遗留类。所以需要重新写一个用array或者linkedlist来实现的stack类。
下面采用linkedlist类来实现stack,(模仿stack中的代码写的)。
package com.hako.ftp; import java.util.LinkedList; import java.util.EmptyStackException; /** * * @author XnnYygn * * @param <E> */ public class ListStack<E> extends LinkedList<E> { /** * create empty stack */ public ListStack() { } /** * Tests if this stack is empty * * @return <code>true</code> if and only if this stack contains no items; * <code>false</code> otherwise. */ public boolean empty() { return size() == 0; } /** * append item to the stack * * @param item * E */ public void push(E item) { add(item); } /** * return the item from the stack and remove it * * @return the item */ public E pop() { E obj = null; obj = peek(); removeLast(); return obj; } /** * return the item from the stack without removing it * * @return the item */ public E peek() { if (size() > 0) return getLast(); else throw new EmptyStackException(); } /** * search the item in the stack * * @param o * @return the index of item */ public int search(Object o) { int i = lastIndexOf(o); if (i >= 0) { return size() - i; } return -1; } /** the generated serialVersionUID */ private static final long serialVersionUID = -1560355629647329776L; }
使用这个stack来保存的主要是压栈的工作目录,其基本工作思路如下:
- 获取当前目录下的所有目录,当前目录下的文件全部输出
- 如果栈非空,切换当前目录到出栈的目录,继续上面的过程
代码如下,具体测试FTP服务器和用户名密码等信息没有列出。
package com.hako.ftp; import java.io.IOException; import java.text.ParseException; import com.enterprisedt.net.ftp.FTPConnectMode; import com.enterprisedt.net.ftp.FTPException; import com.enterprisedt.net.ftp.FTPFile; import com.enterprisedt.net.ftp.FileTransferClient; public class FtpList { // the ftp private FileTransferClient ftp = null; // the stack of task private ListStack<String> stack = null; // the count of item private Integer count = 0; public FtpList() throws FTPException, IOException, ParseException { // prepare ftp = new FileTransferClient(); ftp.setRemoteHost("");//host ftp.setUserName("");//username ftp.setPassword("");//password ftp.getAdvancedSettings().setControlEncoding("GBK"); ftp.getAdvancedFTPSettings().setConnectMode(FTPConnectMode.PASV); }// end of HakoFtpList public void connect() throws IOException, FTPException { // connect ftp.connect(); System.out .println("Connect successfully!"); }// end of Connect public void disconnect() throws IOException, FTPException { // disconnect if (ftp.isConnected()) { ftp.disconnect(); System.out .println("Disconnect successfully"); } }// end of Disconnect public void getAllFileList() throws FTPException, IOException, ParseException { // get file from root getAllFileList(""); }// end of getAllFileList public void getAllFileList(String rootPath) throws FTPException, IOException, ParseException { // init stack and count stack = new ListStack<String>(); count = 0; // get file list under root getFileList(rootPath); // with stack while (!stack.isEmpty()) { getFileList(stack.pop()); } }// end of getAllFileList(rootPath) private void getFileList(String path) throws FTPException, IOException, ParseException { // check the path if (path == null) { return; } else if (path == "") { // get directory for ftp ftp.changeDirectory("/"); } else { // get directory for test ftp.changeDirectory(path); } // get file list FTPFile[] files = ftp.directoryList(); for (FTPFile file : files) { if (file.isDir()) { // System.out.println(path + "/" + file.getName()); stack.push(path + "/" + file.getName()); } else { System.out.println(path + "/" + file.getName()); count++; // System.out.println("Size " + file.size()); } } }// end of getFileList }
至此,可以遍历得到FTP下面的目录列表。
需要修改的地方:
- 保存到文件
- 多一个线程察看进度
等
实际调用代码如下:
FtpList ftplist= new FtpList(); ftplist.connect(); ftplist.getAllFileList(); ftplist.disconnect();
记得捕捉错误
发表评论
-
groovy in action 笔记 2
2009-08-06 19:30 772这里看的时间稍微长了一点,从43到100页,看起来还算顺。 ... -
groovy console readInt
2009-08-03 09:24 1523手中有一本groovy的教程,是那本不算厚的来自某个外国大学的 ... -
linux下用aptana“代替”dreamwaver
2009-07-29 09:25 1548好久没有来这里写东西,主要还是在twitter和自己学校论坛活 ... -
jspwiki+glassfish(zip)
2009-07-04 06:01 1148使用glassfish的zip包原因是要模拟在服务器上配置gl ... -
随想0702
2009-07-02 21:21 658早上首先考虑如何替换glassfish的admin的密码,监视 ... -
初识glassfish
2009-07-01 18:59 891以前XY一直使用的是apache+tomcat的配置。tomc ... -
ubuntu9.04上编译安装firefox 3.5(shiretoko)
2009-07-01 09:55 3560昨天,也就是6月30日,firefox 3.5正式发布了,不过 ... -
S60手机使用putty进行ssh登录
2009-06-30 08:03 2216在同学的介绍下,了解到putty居然有s60版本。正好xy的手 ... -
使用抓虾
2009-06-22 07:28 738最近寻找RSS的时候,发现了一个不错的网站,抓虾。 本来XY是 ... -
EBVIEW和DICTCN
2009-06-05 13:48 1047EBVIEW EBVIEW是一个不错的日文字典,在gnome- ... -
vsftpd安装与配置
2009-06-05 12:55 943以下主要是作为备忘。 从ftp://vsftpd.beast ... -
解决了不小心删除synaptic的问题
2009-06-05 04:12 931首先通过 sudo apt-get install synap ... -
重新安装电脑
2009-06-05 03:00 762这次相比几个星期以前的重装不同在于确定了基本上不使用windo ... -
哎,果然还是无法和C++断绝关系阿
2009-05-30 20:28 773XY不喜欢C++,是有原因的.不过XY不想去回忆自己为什么会讨 ... -
Firefox,网站开发第二个IDE
2009-05-30 19:17 881取这个标题,并不是为了 ... -
现在要找一本适合的书难啊
2009-05-30 13:54 720理论上来说,现在的书越来越多,应该更加容易找到适合自己的书才对 ... -
使用cactus测试ssh应用(2)
2009-02-21 19:54 1430接1 接下来就是考虑如 ... -
使用cactus测试ssh应用(1)
2009-02-21 19:23 2327最近拿到了《Junit In Acti ...
相关推荐
本篇文章将深入探讨如何使用C#实现遍历FTP服务器上的文件夹和文件名。 首先,要实现FTP功能,你需要引入`System.Net`命名空间中的`FtpWebRequest`和`FtpWebResponse`类。这两个类提供了与FTP服务器交互的基础接口。...
3. **发送FTP命令**:在Socket连接上,我们可以使用`send`函数发送FTP命令,然后使用`recv`函数接收服务器的响应。 4. **解析FTP响应**:FTP服务器会返回文件列表信息,这通常是一个格式化的文本,包含每个文件或...
在本程序中,我们使用了FTP的LIST命令来获取服务器目录结构,并通过解析返回的列表信息来构建递归遍历的逻辑。 MFC的CInternetSession类提供了对FTP服务的基础支持,包括连接、断开、登录等操作。接着,...
当我们谈论“ftp下载文件C++列表显示遍历ftp目录”时,我们实际上是在讨论如何使用C++编程语言实现一个FTP客户端,该客户端能够连接到FTP服务器,列出其目录内容,并将这些文件下载到本地计算机。下面,我们将深入...
在本文中,我们将深入探讨如何使用QT库来实现文件的上传和下载功能,特别是与FTP服务器的交互。QT是一个跨平台的应用程序开发框架,广泛应用于C++编程,它提供了丰富的功能,包括网络通信,使得我们可以方便地构建...
在C++编程环境中,当你需要实现远程FTP(文件传输协议)服务器上的文件遍历功能时,`CFtpFileFindftp`类是MFC(Microsoft Foundation Classes)库提供的一种实用工具。这个类允许开发者搜索FTP服务器上的文件和目录...
在Windows编程中,Microsoft提供了一些类库来简化FTP操作,其中`CFtpFileFind`是一个重要的工具,它可以帮助我们高效地遍历FTP服务器上的目录结构。当涉及到处理大量数据或者深层次的目录结构时,递归算法就显得尤为...
FTP(File Transfer Protocol)是一种广泛使用的互联网协议,用于在客户端和服务器之间进行文件传输。在C++编程环境中,我们可以利用FTP库,如libcurl或ftplib,来实现FTP遍历并下载目录的功能。这个功能在软件自动...
递归遍历FTP文件夹,并从文件夹下载所有文件 希望对你有所帮助
实现了遍历FTP磁盘目录生成一个属性结构显示
JAVA遍历下载FTPS服务器上的文件,
FTP是一种广泛使用的互联网协议,用于在服务器和客户端之间传输文件。下面将详细阐述实现这两个功能的关键步骤和涉及的技术。 首先,我们需要了解libcurl库。libcurl是一个开源、跨平台的库,它提供了在各种协议...
本文将深入探讨如何使用C++在Visual C++(VC)中实现递归遍历指定文件夹及其子文件夹的所有文件,并构建一个树结构的表示。 首先,我们需要了解Windows API中的几个关键函数,它们是遍历文件系统的核心: 1. **...
综上所述,"BrownFTPDir.rar_ftp_ftp遍历"涉及到的是使用FTP协议通过一个特定的工具或程序遍历并查看远程FTP服务器的目录结构。理解FTP的工作原理、安全性和操作方式对于网络文件管理和开发相关应用至关重要。
删除FTP上的文件及目录是另一个常见的需求。可以通过发送`DELE`或`RMD`命令来实现这一功能。 ##### 4. 关闭连接 在完成所有操作后,应该关闭与FTP服务器的连接。这可以通过调用`ftpClient.close()`来实现,以释放...
调用MFC库的console程序,VC2010下编译与...测试所用的FTP服务器是本地服务器,基于windows8.1系统自带服务直接创建,详情请百度"win8.1创建FTP”,因此FTP的IP为"127.0.0.1",默认端口21. ITread类为调试用,请无视。
对于喜欢下载的人来说,如果某些FTP比较难连,可以用FtpList整理出这些FTP服务器的URL列表,然后把URL粘贴到FlashGet等下载工具中,这样就可以用比普通FTP工具更可靠、更执着的专业下载工具,一天24小时不停地进行...
Java解析FTP服务器文本文件是指使用Java语言连接FTP服务器,上传、下载、递归目录遍历等基本操作的集合。在这个过程中,我们需要引入相关的jar包,例如cpdetector.jar、jchardet-1.0.jar、antlr.jar、commons-...
在Java编程环境中,实现从FTP(File Transfer Protocol)服务器上按照其目录结构创建本地文件夹并下载文件是一项常见的任务。FTP是一种用于在网络上传输文件的标准协议,它允许用户从远程服务器上获取或发送文件。本...