由于sun没有公开FtpClient的API所以我们將就使用Sun的未公开类别暫時應急一下,方法命名大多與Common net ftpClient 雷同,不足的只好用issueCommand自己丟FTP命令:
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.Proxy;
import sun.net.TelnetInputStream;
import sun.net.TelnetOutputStream;
import sun.net.ftp.FtpClient;
public class SundFtpClient extends FtpClient {
public static final int ASCII_FILE_TYPE =0;
public static final int BINARY_FILE_TYPE=2;
public SundFtpClient(String host) throws IOException {
super(host);
}
public SundFtpClient(String host, int port) throws IOException {
super(host, port);
}
public int issueCommand(java.lang.String cmd) throws IOException{
return super.issueCommand(cmd);
}
public void issueCommandCheck(java.lang.String cmd) throws IOException{
super.issueCommandCheck(cmd);
}
public boolean setFileType(int fileType)throws IOException{
if(fileType==ASCII_FILE_TYPE){
return issueCommand("TYPE A")==1;
}else{
return issueCommand("TYPE B")==1;
}
}
public void enterLocalPassiveMode(){
try{
issueCommand("PASV");
}catch(IOException e){}
}
public boolean isConnected(){
return this.serverIsOpen();
}
public void connect(java.lang.String hostname)throws java.io.IOException{
this.disconnect();
this.openServer(hostname);
}
public void connect(java.lang.String hostname,int port)throws java.io.IOException{
this.disconnect();
this.openServer(hostname,port);
}
public void disconnect()throws java.io.IOException{
if(this.serverIsOpen())
this.closeServer();
}
public boolean deleteFile(String pathname)throws java.io.IOException{
try{
return issueCommand("DELE "+pathname)==1;
}catch(FileNotFoundException e){
return false;
}
}
public boolean makeDirectory(String pathname)throws java.io.IOException{
try{
return issueCommand("MKD "+pathname)==1;
}catch(FileNotFoundException e){
return false;
}
}
public boolean removeDirectory(String pathname)throws java.io.IOException{
try{
return issueCommand("RMD "+pathname)==1;
}catch(FileNotFoundException e){
return false;
}
}
public boolean sendNoOp()throws java.io.IOException{
return issueCommand("NOOP")==1;
}
public String printWorkingDirectory()throws java.io.IOException{
return super.pwd();
}
public boolean changeToParentDirectory()throws java.io.IOException{
return issueCommand("CDUP")==1;
}
public boolean changeWorkingDirectory(String pathname)throws java.io.IOException{
try{
return issueCommand("CWD "+pathname)==1;
}catch(FileNotFoundException e){
return false;
}
}
public void storeFile(String remote,java.io.InputStream local)throws java.io.IOException{
byte[] buf = new byte[1024];
int readed=0;
TelnetOutputStream outs = this.put(remote);
synchronized (local) {
while((readed=local.read(buf,0,1024))>0)
outs.write(buf,0,readed);
outs.flush();
outs.close();
local.close();
}
}
public void retrieveFile(String remote,java.io.OutputStream local)throws java.io.IOException{
byte[] buf = new byte[1024];
int readed=0;
TelnetInputStream ins = this.get(remote);
synchronized (local) {
while((readed=ins.read(buf,0,1024))>0)
local.write(buf,0,readed);
local.flush();
local.close();
ins.close();
}
}
}
测试代码:
import java.io.IOException;
import sun.net.ftp.FtpLoginException;
/*
* 作成日: 2006/04/17
*
* TODO この生成されたファイルのテンプレートを変更するには次へジャンプ:
* ウィンドウ - 設定 - Java - コード・スタイル - コード・テンプレート
*/
/**
* @author Border
*
* TODO この生成された型コメントのテンプレートを変更するには次へジャンプ:
* ウィンドウ - 設定 - Java - コード・スタイル - コード・テンプレート
*/
public class TestSundFtpClient{
public static void main(String[] args) {
String hostname = "192.168.1.209";
int port = 21 ;
String uid = "anonymous";
String pwd = "linuxborder@yahoo.com";
String a = "";
try {
SundFtpClient aftp = new SundFtpClient(hostname,port);
aftp.login(uid,pwd); // login
aftp.binary(); // set to binary mode transfer
System.out.println("login:" + hostname );
aftp.makeDirectory("make");
System.out.println("make ok ! ");
}
catch(FtpLoginException e){
a="login erroy: "+hostname+" please input your read uid or pwd: "+e;
System.out.println(a);
//return false;
}
catch (IOException e){
a=" connect erroy: "+hostname+" please input your read port: "+e;
System.out.println(a);
//return false;
}
catch(SecurityException e)
{
a=" can't connect: "+hostname+" please check your net: "+e;
System.out.println(a);
//return false;
}
}
}
分享到:
相关推荐
sun.net.ftp.FtpClient,it.sauronsoftware.ftp4j.FTPClient,org.apache.commons.net.ftp.FTPClient三种不同的方式操作FTP
Apache FTPClient操作FTP工具类
Delphi XE3使用ICS的FTPClient从FTP服务器下载文件,本人用来实现客户端软件自动升级功能,提供从FTP下载文件的源码供大家参考。之前用的IdFTP连接服务器经常出现10054错误,参考网上的意见使用ICS的FTPClient解决了...
Java程序使用Apache的commons-net-3.0.jar包中的org.apache.commons.net.ftp.FTPClient类实现对ftp上传、下载、删除等操作,是一个不错的东西哦
FTPClient.zip FTPServer.zip FTPClient.zip FTPServer.zip FTPClient.zip FTPServer.zip
(FTPClient FTPServer) sing System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System...
本项目使用org.apache.commons.net.ftp.FTPClient实现文件上传到ftp服务器,解决不能上传中文文件的问题。
Java常用FTP 文件操作 说明 Apache FTPClient ftp4j jftp java中实现ftp 文件上传 文件下载
FtpClient C#ftp辅助类 提供多种ftp操作
VC++编写的ftpClient程序,FTP客户端。
FtpClient写的java FTP工具FtpClient写的java FTP工具FtpClient写的java FTP工具
org.apache.commons.net.ftp.FTPClient FTP工具类,实现上传、下载、压缩到输出流下载等功能
FtpClient FTP 操作类 支持上传下下传(含多线程下载与上传)
VC网络编程:socket编程,实现FTP客户端功能!供参考学习........
org.apache.commons.net.ftp.FTPClient包,不错,在实际项目和产品中使用过。
1,实现了客户端下载ftp服务器文件需求 2,使用了qt中ftp接口,但不需要再次下载编译QFtp类,直接使用即可 3,稍作小修改可实现上传等功能,可直接使用已经写好的接口函数
Java常用FTP文件操作说明Apache.FTPClient,ftp4j,jftp.pdf
FTP应用的jar包,主要用于java开发FTP上传下载
Android的FTP Client程式碼,