做乙個ftp的斷點續傳功能,ftp使用的是org.apache.commons.net.ftp.ftpclient
個人認為需要解決的問題有:
1、上傳的時候暫停
2、找到伺服器上是否已經存在檔案
這兩個問題解決了,斷點續傳也就差不多了
首先,怎麼將上傳的任務終止的問題
設定ftp的setcopystreamlistener,可以獲取當前上傳的進度,可以在這裡中止
中止的方法:直接退出ftp ftp.logout();
ftp.setcopystreamlistener(new copystreamlistener()
@override
public void bytestransferred(copystreamevent arg0) {}
});
中止任務的問題解決了,那麼再看第二個問題
ftp伺服器可能會在乙個使用者下建立多個目錄,比如按天儲存上傳的檔案
這就需要遍歷伺服器上的目錄
這裡需要根據ftp伺服器的目錄結構來寫,下面**是遍歷使用者下多個目錄中的所有檔案
如果使用者下面沒有目錄,可以只用乙個迴圈,根據自己的情況修改
string str = path.substring(0, path.lastindexof("/")); // path上ftp伺服器上的路徑
if(path.endswith("/"))
ftp.changeworkingdirectory(str);
string files = ftp.listnames();
for(int i=0; i
fileinputstream in = new fileinputstream(new file(filepath));
if(in.skip(length) == length)
在最後,只要做一些ftp的其他設定
ftp.setbuffersize(max);
ftp.enterlocalpassivemode();
ftp.setfiletype(ftpclient.binary_file_type);
設定完了後上傳就好了
ftp.storefile(filename, in);
需要注意的是,如果ftp伺服器上已經存在的檔案,這個filename需要和伺服器上的name一樣,才會續傳
***************====2015.01.12***************
做斷點續傳,不知道為什麼,設定檔案指標後上傳會卡住,n...n久,完全不能接受!!
經過測試,應該是指定了檔案讀取的指標使流卡住了。
意外的發現,讓流讀取發生異常,再續傳的時候就沒問題
停止上傳修改:
在logout的地方改為inputstream.close();,主動關閉流,發生異常,停止上傳
要捕獲異常,免得程式崩潰
關於寫東西
寫作能力是需要不斷鍛鍊得來的,前期一定不要因為寫不好而不好意思去寫,這樣會惡性迴圈。你這方面不行還不去鍛鍊,那等死吧。又有人說,我沒有興趣怎麼辦?好吧,這個世界上最難的事情,就是改變別人的思維。它的難度,超越一切技術。李笑來講過興趣和做得好之間的關係,反正我是至今沒想透。但至少,我不會單純的拿沒有興...
關於FTP的學習
因為port方式在傳送資料時,由伺服器主動連線客戶端,所以,如果客戶端在防火牆或nat閘道器後面,用port方式將無法與internet上的ftp伺服器傳送檔案。這種情況需要使用pasv方式。幾乎所有的ftp客戶端軟體都支援這兩種方式。特殊的典型例子是ie,ie預設是用port方式的。如果要在ie裡...
關於學東西的耐心
都說現在社會的風氣很浮躁,學習和工作都是急於求成,缺乏耐心。我想,這種現象在我們計算機專業就應該更普遍了。計算機本就是是乙個應用學科,就是學了拿來做事的。你學一項技術,絕大部分不是為了將這項技術發揚光大,而是要會用它,拿它來做事,拿它來作為自己技能術的一部分。這種情況下,學起來想不浮躁都難。再者說,...