2016-07-20 152 views
0

我知道如何使用ftp4j但是我想用同樣的方法下載從FTP文件上傳文件,我希望看到:下載文件從FTP使用ftp4j

  1. 服務器目錄(httpdocs資料/文件夾/到/下載/從/ file.extension)
  2. 本地目錄(/sdcard/folder/to/download/to/file.extension)

下面是我用上傳的代碼:

file_destination = new File(filDir +"/"+fileName); // where fileDir + filename = sdcard/document/file.txt 

private void uploadImage() { 
    // TODO Auto-generated method stub 

    file_destination_string = file_destination.toString(); 
    upload_file = new File(file_destination_string); 
    uploadFile(upload_file); 

} 
    private void uploadFile(File f) { 
    // TODO Auto-generated method stub 
     client = new FTPClient(); 
     try { 
      client.connect(FTP_HOST,21);   //where HOST is ip address of server 
      client.login(FTP_USER, FTP_PASS);   // FTP user/password 
      client.setType(FTPClient.TYPE_BINARY); 
      client.changeDirectory(FTP_DIR);   //where FTP_DIR = /httpdocs/folder/ 
      client.upload(f, new MyTransferListener());  

     } catch (Exception e) { 
      Toast.makeText(getBaseContext(), "FTP Failed: "+e, Toast.LENGTH_SHORT).show(); 
      System.out.println("e1..."+e); 
      e.printStackTrace(); 
      try { 
       client.disconnect(true); 

       Log.e("MYAPP", "exception", e); 
       System.out.println("e2..."); 
      } catch (Exception e2) { 
       System.out.println("e3..."); 
       e2.printStackTrace(); 
      } 
     } 
    } 
    public class MyTransferListener implements FTPDataTransferListener { 

     public void started() { 
      Toast.makeText(getBaseContext(), " Upload Started ...", Toast.LENGTH_SHORT).show(); 
     } 

     public void transferred(int length) { 
      Toast.makeText(getBaseContext(), " transferred ..." + length, Toast.LENGTH_SHORT).show(); 
     } 

     public void completed() { 
      Toast.makeText(getBaseContext(), " completed ...", Toast.LENGTH_SHORT).show(); 
     } 

     public void aborted() { 
      Toast.makeText(getBaseContext()," transfer aborted, please try again...", Toast.LENGTH_SHORT).show(); 
     } 

     public void failed() { 
      Toast.makeText(getBaseContext()," failed..", Toast.LENGTH_SHORT).show(); 
     } 
} 

如何下載文件?

+1

你可以使用'client.download(「myfile.txt的」,新的Java。 io.File(「d:/myfile.txt」));'這會將「myfile.txt」下載到「D:\ myfile.txt」。 – Bobby

+0

我試圖上傳和下載到安卓設備上,而不是PC – TwoStarII

+0

容易,只需用「/sdcard/myfile.txt」替換「D:\ myfile.txt」 – Bobby

回答

0

有可用的下載方法。

您可以使用client.download("myfile.txt", new java.io.File("d:/myfile.txt"));這會將「myfile.txt」下載到「D:\ myfile.txt」。

對於android來說,整個事情有點不同。 如果你想存儲在一個定義文件夾(例如在SD卡),你可以使用它像這樣:

client.download("myfile.txt", new java.io.File("/sdcard/myfile.txt"));

如果你想做到這一點下載到應用程序的默認數據目錄,你可以使用方法context.getExternalFilesDir()。如果您通過null作爲參數,則會返回外部存儲上應用程序專用目錄的根目錄。

點擊此處瞭解詳情:https://developer.android.com/reference/android/content/Context.html#getExternalFilesDir(java.lang.String)

另外,在這裏引用AndroidDevelopers:

KITKAT開始,沒有權限才能讀取或寫入 返回的路徑;它始終可供調用應用程序訪問。此 僅適用於爲調用 應用程序的包名稱生成的路徑。要訪問屬於其他包的路徑,需要 WRITE_EXTERNAL_STORAGE和/或READ_EXTERNAL_STORAGE

所以你不需要這兩個權限來訪問你自己的應用程序文件。

最後,該代碼應該下載一個文件,只需在您的應用程序默認目錄創建一個新的文件:

client.download("myfile.txt", new java.io.File(context.getExternalFilesDir(null), "myfile.txt"));