1、ftp 伺服器資訊實體類:
public class ftpserverbean
/*** @param hostname 伺服器位址
*/public void sethostname(string hostname)
/*** 獲取伺服器端口
* @return port 返回伺服器端口
*/public int getport()
/*** @param port 伺服器端口
*/public void setport(int port)
/*** 獲取伺服器使用者名稱
* @return username 返回伺服器使用者名稱
*/public string getusername()
/*** @param username 伺服器使用者名稱
*/public void setusername(string username)
/*** 獲取伺服器密碼
* @return password
*/public string getpassword()
/*** @param password 伺服器密碼
*/public void setpassword(string password)
/*** 建構函式
* @param hostname 伺服器位址
* @param port 伺服器端口
* @param username 伺服器使用者名稱
* @param password 伺服器密碼
*/public ftpserverbean(string hostname, int port, string username, string password)
}2、檔案上傳類:
public class ftpupload
/*** 日誌
*/private static final logger log = logger.getlogger(ftpupload.class);
/*** ftp 登陸
* @return islogin
*/public boolean ftplogin() else
// ftp伺服器連線回答
int reply = this.ftpclient.getreplycode();
if (!ftpreply.ispositivecompletion(reply))
ftpclient.setcontrolencoding("gbk");
// conf 設定伺服器的編碼
ftpclientconfig conf = new ftpclientconfig(ftpclientconfig.syst_nt);
conf.setserverlanguagecode("zh");
this.ftpclient.login(this.ftpbean.getusername(), this.ftpbean.getpassword()); // 登陸伺服器
// 設定傳輸協議
this.ftpclient.enterlocalpassivemode();
ftpclient.setfiletype(ftp.binary_file_type);
islogin = true;
} catch (exception e)
return islogin;
}/**
* ftp 關閉連線
*/public void ftplogout() catch (ioexception e) finally catch (ioexception e) }}
}/**
* ftp 上傳
* @param localpath 本地檔案路徑
* @param remotepath 遠端檔案路徑
* @return result 返回上傳是否失敗
*/public boolean upload(string localpath, string remotepath)
// 建立目錄
if(!createdirs(remotepath.substring(0, remotepath.lastindexof('/') )))
boolean result = false;
ftpfile files = null;
try catch (ioexception e)
// 如果遠端檔案已存在
if(files.length == 1)else if(remotesize > localsize)
// 移動檔案內讀取指標,實現斷點續傳
result = uploadfile(remotepath, f, remotesize);
// 如果斷點續傳沒有成功,則刪除伺服器上檔案,重新上傳
if(!result) catch (ioexception e)
result = uploadfile(remotepath, f, 0);
} }
// 如果遠端檔案不存在
else
ftplogout();
return result;
}/**
* 上傳檔案
* @param remotepath 遠端檔案目錄
* @param localpath 本地檔案目錄
* @param remotesize 遠端檔案大小(若遠端的檔名已存在)
* @return result 返回上傳是否成功
*/@suppresswarnings("resource")
public boolean uploadfile(string remotepath, file localpath, long remotesize) catch (filenotfoundexception e)
outputstream out = null;
try
} catch (unsupportedencodingexception e) catch (ioexception e)
//檔案上傳
if(remotesize > 0) catch (ioexception e)
localreadbytes = remotesize;
} byte bytes = new byte[1024];
int c;
try
}out.flush();
raf.close();
out.close();
result =ftpclient.completependingcommand();
} catch (ioexception e)
return result;
}/**
* ftpclient
* @return
*/private ftpclient getclient()
/*** 獲取 ftpbean
* @return ftpbean
*/public ftpserverbean getftpbean()
/*** 在伺服器上建立目錄
* @param remotepath 遠端路徑,用於建立遠端目錄
*/public boolean createdirs(string remotepath)
} catch (ioexception e)
}return true;}}
ftp斷點續傳
import open.mis.data.downloadstatus import open.mis.data.uploadstatus import org.apache.commons.net.printcommandlistener import org.apache.commons.net...
FTP實現斷點續傳
ftp客戶端實現要建立兩個通道,乙個控制命令通道,讓ftp伺服器知道客戶端要幹什麼,乙個資料傳輸通道。所謂的兩個通道只不過是兩個呼叫了connect函式的連線,只是控制命令通道專門用來傳輸一些字串命令資訊,而資料通道則是用來傳輸檔案。控制命令通道一定是由客戶端向伺服器的連線 預設的埠是21,也可以指...
FTP實現斷點續傳
ftp客戶端實現要建立兩個通道 乙個控制命令通道,讓ftp伺服器知道客戶端要幹什麼,乙個是資料傳輸通道。所謂的兩個通道只不過是兩個呼叫了connect函式的連線,只是控制命令通道專門用來傳輸一些字串命令資訊,而資料通道則是用來傳輸檔案。控制命令通道一定是由客戶端向伺服器的連線 預設的埠是21,也可以...