ftp4j是个很年轻的开源项目,但是试用后发现很好很强大,如果你找一个纯java的FTP库,要支持socks4,socks4a,socks5,http代理,就是他了!
比apache的FTPClient(不支持代理)、半商业的edtFTPj(PRO支持代理,但是要$,而且是系统变量级的代理,不能单个指定)等好用多了,而且是LGPL协议,源码质量很高。(不过如果你需要FTPS及SFTP,那ftp4j不支持)
jar包只有50多k,地址在这里:ftp4j
使用代理的代码:
-
import java.util.ArrayList;
-
importit.sauronsoftware.ftp4j.FTPClient;
-
importit.sauronsoftware.ftp4j.FTPFile;
-
importit.sauronsoftware.ftp4j.connectors.SOCKS4Connector;
-
......
-
//ftp4j使用socks4代理连接FTP示例,by http://bianbian.org
-
FTPClientftp = new FTPClient();
-
SOCKS4Connectorsocks4 = new SOCKS4Connector("127.0.0.1", 1080);
-
ftp.setConnector(socks4);
-
ftp.connect("an.ip.or.host", 21);
-
ftp.login("anonymous", "bianbian@bianbian.org");
-
ftp.setCharset("gbk");
-
//list files
-
FTPFile[]list = ftp.list();
-
for(FTPFilefile : list) {
-
System.out.println(file);
-
}
-
ftp.disconnect(true);
在解析部分FTP站点的目录list的时候遇到了FTPListParseException(也怪FTP协议没有对LIST格式作出标准)。查看源码发现,主要是两个问题:
1)文件权限不只rwx这三个,附加了s、t(详见http://en.wikipedia.org/wiki/File_system_permissions)
2)部分ftpd似乎直接调用的“ls -l”输出目录,第一行是“total xxx”
给作者写信了,说不定下个版本就有Sepcial Thanks to bianbian 了。嘿嘿嘿嘿。。。
修正后的代码(省略后面没有变化的部分):
-
public class UnixListParser implements FTPListParser {
-
// bianbian.org: Pattern有问题,修正
-
privatestatic final Pattern PATTERN = Pattern
-
.compile("^([dlcbsp//-])[r//-][w//-][xsS//-][r//-][w//-][xsS//-][r//-][w//-][xtT//-]//s+"
-
+ "(?://d+//s+)?//S+//s*//S+//s+(//d+)//s+(?:(//w{3})//s+(//d{1,2}))//s+"
-
+ "(?:(//d{4})|(?:(//d{1,2}):(//d{1,2})))//s+"
-
+ "([^/////*?/"<>|]+)(?: -> ([^////*?/"<>|]+))?$");
-
privatestatic final DateFormat DATE_FORMAT = new SimpleDateFormat(
-
"MMM dd yyyy HH:mm", Locale.US);
-
publicFTPFile[] parse(String[] lines) throws FTPListParseException {
-
intcurrentYear = new GregorianCalendar().get(Calendar.YEAR);
-
inti, jump = 0, size = lines.length;
-
//bianbian.org: glftpd 的第一行和 ls -l 一样,会丢个"total N"过来,先去掉
-
if(size > 0 && lines[0].startsWith("total")) {
-
size--;
-
jump = 1;
-
}
-
FTPFile[]ret = new FTPFile[size];
-
for(i = 0; i < size; i++) {
-
Matcherm = PATTERN.matcher(lines[i + jump]);
-
if(m.matches()) {
-
ret[i] = newFTPFile();
-
// Retrieve the data.
-
chartypeChar = m.group(1).charAt(0);
-
StringsizeString = m.group(2);
-
StringmonthString = m.group(3);
-
StringdayString = m.group(4);
-
StringyearString = m.group(5);
-
StringhourString = m.group(6);
-
StringminuteString = m.group(7);
-
StringnameString = m.group(8);
-
StringlinkedString = m.group(9);
-
// Parse the data.
-
if("-cbsp".indexOf(typeChar) > -1) {
-
ret[i].setType(FTPFile.TYPE_FILE);
-
}else if (typeChar == 'd') {
-
ret[i].setType(FTPFile.TYPE_DIRECTORY);
-
}else if (typeChar == 'l') {
-
ret[i].setType(FTPFile.TYPE_LINK);
-
ret[i].setLink(linkedString);
-
}else {
-
thrownew FTPListParseException();
-
}
- ...
分享到:
相关推荐
java ftp client server 代码 java ftp client server 代码 java ftp client server 代码 java ftp client server 代码
ftp server and ftp client
Java Socket 模拟 Ftp Server/Client
JAVA FTP客户端经典
该代码总共有两部分 第一部分是FTPClient.java 第二部分是FtpSession.java
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能。可以将ftp4j嵌到你的Java应用中,来传输文件(包括上传和下载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp...
Client ftp (connects to a ftp server).
Java FTP 客户端用java编写的FTP客户端,可以一次上传多个文件。 编译: $ javac FTPClient.java 跑步: $ java FTPClient -u username -p password -server server -files file1:file2:file3 用户名、密码和服务器...
1背景参考文章:Java使用SFTP和FTP两种连接方式实现对服务器的上传下载java使用JSCH连接FTP(Linux服务器)上传文件到Linux服务器Jav
ftp客户端 java实现的 有详细分析步骤 功能模块图 原程序
vxWorks下ftp client源码
一个Java Applet小程序。提供FTP上传文件(目录),支持拖放本地文件。可配置上传文件的格式等。 测试配置:Tomcat6.0 (IE控件) FTP服务端:TYPSoft FTP Server Client
ftp的server和client的代码 比较简单
Java内置的FTP协议客户端。 仅命令行界面-没有GUI。
以前那个没有上传源码,这个是源码。...一个Java Applet小程序。提供FTP上传文件(目录),支持拖放本地文件。可配置上传文件的格式等。 测试配置:Tomcat6.0 (IE控件) FTP服务端:TYPSoft FTP Server Client
java通过ftp三种方式 上传 下载文件: 1. 通过sun :sun.net.ftp.FtpClient 2. 通过apache:org.apache.commons.net.ftp.FTPClient 3. 通过edtftp: com.enterprisedt.net.ftp.FileTransferClient
Very simple FTP-Client. Maybe interesting for someone
FTP是常用的网络功能,Java语言有很强的网络编程功能。使用Java语言开发FTP客户端程序很有实用价值。文章介绍了FTP协议的功能特点和FTP客户端的常用命令,阐述了如何使用Java程序设计语言来实现FTP客户端程序功能,并给...
Swing+FtpClient实现 支持文件、文件夹上传 支持文件、文件夹下载 支持文件重命名 支持文件删除等功能
用Java自己的写FTP服务器与客户端。 Control和Data双线程,数据传输时开20口,21口进行侦听与Control连接 支持USER, PASS, RETR, STOR, ABOR, QUIT 5个口令。用户验证没加入,需要的自行加入。