JAVA中使用FTPClient實(shí)現(xiàn)文件上傳下載

在JAVA程序中玫膀,經(jīng)常需要和FTP打交道浊吏,比如向FTP服務(wù)器上傳文件掀序、下載文件帆焕,本文簡單介紹如何利用jakarta commons中的FTPClient(在commons-net包中)實(shí)現(xiàn)上傳下載文件。

一不恭、上傳文件

原理就不介紹了叶雹,大家直接看代碼吧

[Java]view plaincopyprint?

/**

* Description: 向FTP服務(wù)器上傳文件

* @Version1.0 Jul 27, 2008 4:31:09 PM by 崔紅保(cuihongbao@d-heaven.com)創(chuàng)建

* @param url FTP服務(wù)器hostname

* @param port FTP服務(wù)器端口

* @param username FTP登錄賬號

* @param password FTP登錄密碼

* @param path FTP服務(wù)器保存目錄

* @param filename 上傳到FTP服務(wù)器上的文件名

* @param input 輸入流

* @return 成功返回true德挣,否則返回false

*/

publicstaticbooleanuploadFile(String url,intport,String username, String password, String path, String filename, InputStream input) {

booleansuccess =false;

FTPClient ftp =newFTPClient();

try{

intreply;

ftp.connect(url, port);//連接FTP服務(wù)器

//如果采用默認(rèn)端口茬射,可以使用ftp.connect(url)的方式直接連接FTP服務(wù)器

ftp.login(username, password);//登錄

reply = ftp.getReplyCode();

if(!FTPReply.isPositiveCompletion(reply)) {

ftp.disconnect();

returnsuccess;

}

ftp.changeWorkingDirectory(path);

ftp.storeFile(filename, input);

input.close();

ftp.logout();

success =true;

}catch(IOException e) {

e.printStackTrace();

}finally{

if(ftp.isConnected()) {

try{

ftp.disconnect();

}catch(IOException ioe) {

}

}

}

returnsuccess;

}

/**

* Description: 向FTP服務(wù)器上傳文件

* @Version1.0 Jul 27, 2008 4:31:09 PM by 崔紅保(cuihongbao@d-heaven.com)創(chuàng)建

* @param url FTP服務(wù)器hostname

* @param port FTP服務(wù)器端口

* @param username FTP登錄賬號

* @param password FTP登錄密碼

* @param path FTP服務(wù)器保存目錄

* @param filename 上傳到FTP服務(wù)器上的文件名

* @param input 輸入流

* @return 成功返回true,否則返回false

*/

public static boolean uploadFile(String url,int port,String username, String password, String path, String filename, InputStream input) {

boolean success = false;

FTPClient ftp = new FTPClient();

try {

int reply;

ftp.connect(url, port);//連接FTP服務(wù)器

//如果采用默認(rèn)端口漆改,可以使用ftp.connect(url)的方式直接連接FTP服務(wù)器

ftp.login(username, password);//登錄

reply = ftp.getReplyCode();

if (!FTPReply.isPositiveCompletion(reply)) {

ftp.disconnect();

return success;

}

ftp.changeWorkingDirectory(path);

ftp.storeFile(filename, input);

input.close();

ftp.logout();

success = true;

} catch (IOException e) {

e.printStackTrace();

} finally {

if (ftp.isConnected()) {

try {

ftp.disconnect();

} catch (IOException ioe) {

}

}

}

return success;

}

下面我們寫兩個(gè)小例子:

1.將本地文件上傳到FTP服務(wù)器上沾瓦,代碼如下:

[Java]view plaincopyprint?

@Test

publicvoidtestUpLoadFromDisk(){

try{

FileInputStream in=newFileInputStream(newFile("D:/test.txt"));

booleanflag = uploadFile("127.0.0.1",21,"test","test","D:/ftp","test.txt", in);

System.out.println(flag);

}catch(FileNotFoundException e) {

e.printStackTrace();

}

}

@Test

public void testUpLoadFromDisk(){

try {

FileInputStream in=new FileInputStream(new File("D:/test.txt"));

boolean flag = uploadFile("127.0.0.1", 21, "test", "test", "D:/ftp", "test.txt", in);

System.out.println(flag);

} catch (FileNotFoundException e) {

e.printStackTrace();

}

}

2.在FTP服務(wù)器上生成一個(gè)文件满着,并將一個(gè)字符串寫入到該文件中

[Java]view plaincopyprint?

@Test

publicvoidtestUpLoadFromString(){

try{

InputStream input =newByteArrayInputStream("test ftp".getBytes("utf-8"));

booleanflag = uploadFile("127.0.0.1",21,"test","test","D:/ftp","test.txt", input);

System.out.println(flag);

}catch(UnsupportedEncodingException e) {

e.printStackTrace();

}

}

@Test

public void testUpLoadFromString(){

try {

InputStream input = new ByteArrayInputStream("test ftp".getBytes("utf-8"));

boolean flag = uploadFile("127.0.0.1", 21, "test", "test", "D:/ftp", "test.txt", input);

System.out.println(flag);

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

}

}

二、下載文件

從FTP服務(wù)器下載文件的代碼也很簡單贯莺,參考如下:

[Java]view plaincopyprint?

/**

* Description: 從FTP服務(wù)器下載文件

* @Version1.0 Jul 27, 2008 5:32:36 PM by 崔紅保(cuihongbao@d-heaven.com)創(chuàng)建

* @param url FTP服務(wù)器hostname

* @param port FTP服務(wù)器端口

* @param username FTP登錄賬號

* @param password FTP登錄密碼

* @param remotePath FTP服務(wù)器上的相對路徑

* @param fileName 要下載的文件名

* @param localPath 下載后保存到本地的路徑

* @return

*/

publicstaticbooleandownFile(String url,intport,String username, String password, String remotePath,String fileName,String localPath) {

booleansuccess =false;

FTPClient ftp =newFTPClient();

try{

intreply;

ftp.connect(url, port);

//如果采用默認(rèn)端口风喇,可以使用ftp.connect(url)的方式直接連接FTP服務(wù)器

ftp.login(username, password);//登錄

reply = ftp.getReplyCode();

if(!FTPReply.isPositiveCompletion(reply)) {

ftp.disconnect();

returnsuccess;

}

ftp.changeWorkingDirectory(remotePath);//轉(zhuǎn)移到FTP服務(wù)器目錄

FTPFile[] fs = ftp.listFiles();

for(FTPFile ff:fs){

if(ff.getName().equals(fileName)){

File localFile =newFile(localPath+"/"+ff.getName());

OutputStream is =newFileOutputStream(localFile);

ftp.retrieveFile(ff.getName(), is);

is.close();

}

}

ftp.logout();

success =true;

}catch(IOException e) {

e.printStackTrace();

}finally{

if(ftp.isConnected()) {

try{

ftp.disconnect();

}catch(IOException ioe) {

}

}

}

returnsuccess;

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市缕探,隨后出現(xiàn)的幾起案子魂莫,更是在濱河造成了極大的恐慌,老刑警劉巖爹耗,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件耙考,死亡現(xiàn)場離奇詭異秽誊,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)琳骡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來讼溺,“玉大人楣号,你說我怎么就攤上這事∨鳎” “怎么了炫狱?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長剔猿。 經(jīng)常有香客問我视译,道長,這世上最難降的妖魔是什么归敬? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任酷含,我火速辦了婚禮,結(jié)果婚禮上汪茧,老公的妹妹穿的比我還像新娘椅亚。我一直安慰自己,他們只是感情好舱污,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布呀舔。 她就那樣靜靜地躺著,像睡著了一般扩灯。 火紅的嫁衣襯著肌膚如雪媚赖。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天珠插,我揣著相機(jī)與錄音惧磺,去河邊找鬼。 笑死丧失,一個(gè)胖子當(dāng)著我的面吹牛豺妓,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播布讹,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼琳拭,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了描验?” 一聲冷哼從身側(cè)響起白嘁,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎膘流,沒想到半個(gè)月后絮缅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鲁沥,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年耕魄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了画恰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,561評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡吸奴,死狀恐怖允扇,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情则奥,我是刑警寧澤考润,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站读处,受9級特大地震影響糊治,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜罚舱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一井辜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧馆匿,春花似錦抑胎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至赃蛛,卻和暖如春恃锉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背呕臂。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工破托, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人歧蒋。 一個(gè)月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓土砂,卻偏偏與公主長得像,于是被迫代替她去往敵國和親谜洽。 傳聞我的和親對象是個(gè)殘疾皇子萝映,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評論 2 359

推薦閱讀更多精彩內(nèi)容