扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
摘要
10年积累的成都网站设计、成都网站制作经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有德州免费网站建设让你可以放心的选择与我们合作。
本文解释了如何利用库用Java语言编写FTP客户端代码。它比较了FTP库的一个完全列表,演示了每个库的优点和缺点,并且帮助决策者为他们的需要选择适当的库。另外,本文阐述了Fa?ade模式如何在取代一个库时改变管理。最后,作者Jean-Pierre Norguet讨论并解决了由于缺乏权威性的说明书引起的一些问题。
让我们假设一个情景:我们要编写一个纯Java应用程序,该程序必须从运行FTP服务器的远程计算机上下载文件。我们也通过远程文件信息,像名字、日期、或者尺寸,来过滤下载。
自己来写一个FTP协议处理,尽管是有可能,并且可能很有趣。但是这样做也有可能有困难、花费长时间、并且有潜在的风险。既然我们不肯花费时间、精力、或者金钱自己来写一个处理器,那我们推荐使用一个可重用的现有的软件组件。万维网上有并且大量的库可供使用。有了一个FTP客户端库,下载一个文件用Java语言编写就像下面一样简单:
FTPClient ftpClient = new FTPClient();
ftpClient.connect("", "user01", "pass1234");
ftpClient.download("C:\\Temp\\", "README.txt");
// Eventually other operations here ...
ftpClient.disconnect();
寻找一个适合我们需要的高质量的Java FTP客户端库并不像他看起来那么简单;它可能相当困难。要找到一个Java FTP客户端库需要花一些时间。接着,在我们找到所有的已存在的库之后,我们选哪个?每个库适合不同的需要。库在质量上是不等的,并且它们的设计有本质的区别。每个提供一套不同的属性和使用不同类型的行话来描述他们。
因此,计算和比较FTP客户端库证明是困难而且令人迷惑的。重复使用已存在的组件是一个值得推荐的过程,但在这个例子中,启动它也是令人沮丧的。并且这有点羞愧:在选好的一个好的FTP库之后,剩下的工作就是例程了。
本文旨在使选择过程简短、容易、并且有价值。我首先列出了所有的FTP客户端库。接着,我定义和描述了库应该用某种方式找到的相关标准的一个表格。最后,我列出了一个总浏览的矩阵,该矩阵给出了库间相互比较的过程的快速浏览。所有的信息提供了我们作出一个迅速、可靠、和长期的决定所需的每件事。
使用JDK(Java 开发工具集)的FTP支持
用于FTP的访问规范是用于注释的请求:959(RFC959)。Sun Microsystems提供了JDK的一个RFC959执行。但是它是内部的、非文档化的、并且不提供任何资源。当RFC959在尚未公开时,它实际上是执行RFC1738、URL规范的一个公共界面的后终端。如图1。
图1. 使用JDK的FTP支持。
RFC1738的一个执行过程在JDK中作为标准给出。它为基本的FTP传送做一个可推理的工作。它是公共的、文档化的、并且提供源代码。要使用它,我们可编写下面语句:
URL url = new URL(";type=i");
URLConnection urlc = url.openConnection();
InputStream is = urlc.getInputStream(); // To download
OutputStream os = urlc.getOutputStream(); // To upload
使用JDK的FTP客户端严格的遵守标准推荐,但它有以下几个说明:
它从根本上区别于第三方的FTP客户端库;这些执行RFC959而不是RFC1738
RFC959用大多数的桌面FTP客户端工具执行。许多Java程序员使用这些工具连接到FTP服务器上。作为一个尝试,这些工具及有可能优先于类似的RFC959库。
URL 和URLConnection类只开放用于通讯的流。Sun库不为构造原始的FTP服务器响应成为像String、 File、 RemoteFile、 或者 Calendar之类的更合用的Java对象而提供直接支持。所以我们不得不编写更多的代码,只是为了把数据写入一个文件中或者开始一个目录列表。
正像RFC1738的3.2部分解释的一样,"最优化",FTP URL在每个操作后要求关闭(控制)连接。这对于传送许多小文件是一种浪费、并且毫无效率。而且,作了特别限制FTP服务器可能把会这样一个通讯开销认为一个是恶毒的网络攻击或者滥用而拒绝提供进一步的服务。
最后,它缺乏几个有用的属性。
由于以上所有或者某种原因,可优先使用一个第三方的库。下面部分列出了可供选择的第三方的库。
见:
您好,/ **
*创建日期:2008年12月23日
*类名:
*类路径:组织结构
*更改日志:
* / 包组织结构;
进口的java.io.File;
进口java.io.FileInputStream中;
进口java.io.FileOutputStream中;
进口的java。 io.IOException;
进口sun点虐 .TelnetInputStream;
进口sun点虐 .TelnetOutputStream;
进口sun点虐 .;
/ **
* @作者南山地狱
* @说明FTP操作
* /
公共类的Ftp {
/ **
* BR /获取FTP目录* / 公共无效getftpList(){
字符串服务器=“IP地址 /输入FTP服务器/弦乐用户=”“;/ / FTP服务器的登录用户名
字符串密码=“”;/ /登录FTP服务器的用户名
字符串路径密码=“”;/ / FTP路径上的服务器
尝试{
FtpClient的FTP客户端=新FtpClient的();/ /创建FtpClient的对象
ftpClient.openServer(服务器);/ /连接到FTP服务器
ftpClient.login(用户名,密码);/ / FTP服务器 BR /如果(path.length()= 0){
ftpClient.cd(路径);
}
TelnetInputStream是= ftpClient.list();
诠释三;
而{
System.out.print((char)的C)((C = is.read())= -1!);
}
掉} is.close ();
ftpClient.closeServer();/ /退出FTP服务器
}赶上(IOException异常前){
System.out.println(ex.getMessage());
}
}
/ **
*
* /
公共无效getFtpFile(){
字符串服务器=“”;/ / IP地址中输入FTP服务器
弦乐用户=“”;/ / FTP服务器的登录用户名
字符串密码=“”;/ /登录密码为FTP服务器的用户名
字符串路径=“路径
字符串文件名“;/ /上=的FTP服务器”“;/ /下载文件名称
尝试{
FtpClient的FTP客户端=新FtpClient的();
ftpClient.openServer(服务器);
ftpClient.login(用户名,密码);
如果(路径。长度()= 0)
ftpClient.cd(路径);!
ftpClient.binary();
TelnetInputStream是= ftpClient.get(文件名);
文件file_out =新的文件(文件名);
文件输出流OS =新的文件输出流(file_out);
字节[]字节=新字节[1024];
诠释三;
而((C = is.read(字节))= -1){
os.write (字节,0,C);
}!
掉} is.close();
os.close();
ftpClient.closeServer();
}赶上(IOException异常前){
System.out.println (ex.getMessage());
}
FTP}
/ **
*文件上传到FTP
* /
公共无效putFtpFile() {
字符串服务器=“”;/ /输入IP地址对服务器
字符串用户的地址=“”;/ / FTP服务器的登录用户名
字符串密码=“”;/ / FTP服务器登录用户名密码
字符串路径=“”就 / FTP服务器/字符串文件名=“”;/ /上传的文件名
FtpClient的FTP客户端=新的try { FtpClient的();
ftpClient.openServer(服务器);
ftpClient.login(用户名,密码);
如果(!path.length()= 0)
ftpClient.cd (路径);
ftpClient.binary();
TelnetOutputStream OS = ftpClient.put(文件名);
文件file_in =新的文件(文件名);
文件输入流是=新的文件输入流(file_in);
字节[]字节=新字节[1024];
诠释三;
同时(! (C = is.read(字节))= -1){
操作系统。写(字节,0,C);
}
掉} is.close();
os.close();
ftpClient.closeServer();
}赶上(IOException异常前){
System.out.println(ex.getMessage());
}
}
}
FTP 的主要操作都是基于各种命令基础之上的。常用的命令有: · 设置传输模式,它包括ASCⅡ(文本) 和BINARY 二进制模式; · 目录操作,改变或显示远程计算机的当前目录(cd、dir/ls 命令); · 连接操作,open命令用于建立同远程计算机的连接;close命令用于关闭连接; · 发送操作,put命令用于传送文件到远程计算机;mput 命令用于传送多个文件到远程计算机; · 获取操作,get命令用于接收一个文件;mget命令用于接收多个文件。 编程思路 根据FTP 的工作原理,在主函数中建立一个服务器套接字端口,等待客户端请求,一旦客户端请求被接受,服务器程序就建立一个服务器分线程,处理客户端的命令。如果客户端需要和服务器端进行文件的传输,则建立一个新的套接字连接来完成文件的操作。 编程技巧说明
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流