2011-12-24 70 views
0

我正在製作一個Android應用程序,它可以使用FTPClient將文件從服務器複製到SDCard中。我使用Apache公共庫中的FTPClient類。但服務器包含1000多個文件,當我嘗試從服務器獲取文件名時,我得到SocketException:「連接已重置」(此時我有25個文件名)。庫的版本是3.0.1。我該如何解決它?如何解決FTPClient的異常?

功能遞歸獲取文件:

private void getFileNames(String directory, FTPClient client) throws IOException { 

    Log.e("directory", "*"+directory+"**********"); 
    client.changeWorkingDirectory(directory); 
    FTPFile[] files=client.listFiles(); 
    for (FTPFile file:files) { 
     client.changeWorkingDirectory(directory); 
     if (file.isFile()) { 
      ++i; 
      Log.e("file", file.getName()); 
      Toast.makeText(this, String.valueOf(file.getName()), Toast.LENGTH_SHORT).show(); 
     } 
     else { 

      if (file.isDirectory()&&(!file.getName().equals("."))&&(!file.getName().equals(".."))) { 

       //Log.e("1", file.getLink()); 
       getFileNames(file.getName(), client); 
      } 
     } 
    } 

    Log.e("directory", "**********"); 
} 

代碼製作FTPClient:

FTPClient client=new FTPClient(); 
    try { 
      client.connect(InetAddress.getByName("ftptestsite.com")); 
     boolean result=client.login("ftptest1", "bEWw9eZR"); 
     //client.completePendingCommand(); 
     //client.enterLocalPassiveMode(); 
     client.setDataTimeout(Integer.MAX_VALUE); 
     i=0; 
     getFileNames("Power Serve", client); 
     button.setText(String.valueOf(i)); 
     //Log.e("size", String.valueOf(client.listFiles("Power_Serve").length)); 
     //getFileNames(client.listFiles("Power Serve")); 
     } catch (SocketException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
      Log.e("SocketException", e.getMessage()); 
     } catch (UnknownHostException e) { 
      // TODO Auto-generated catch block 
      Log.e("UnknownHostException", e.getMessage()); 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
      Log.e("IOException", e.getMessage()); 
     } 
+0

請給我們看看代碼。 – Kai 2011-12-24 15:21:28

+0

我編輯了代碼,請檢查它。 – user1078760 2011-12-24 15:36:05

+0

hm,也許你可以設置ftpclient對象的套接字超時 – 2011-12-24 15:36:33

回答

0

嘗試刪除遞歸和測試,如果如果一個目錄的作品。我不確定你是否可以這樣使用FTPClient

順便說一下,在遞歸調用中,您傳遞的是文件名,changeWorkingDirectory()將不起作用。您還應該從循環中刪除client.changeWorkingDirectory(directory);。在循環之前做一次就夠了。

+0

請告訴我 - 我該如何修復我的代碼,它顯示了我的文件樹?我的代碼不起作用,我沒有看到它。 – user1078760 2011-12-24 16:21:10

+0

我已經提出你的建議,現在應用程序工作時間更長,但仍然使SocketException – user1078760 2011-12-24 16:46:36

+0

@ user1078760:通過添加一個ProtocolCommandListener:client.addProtocolCommandListener(新的PrintCommandListener(新的 PrintWriter(System.out)))打開詳細日誌記錄。 '。也許你在那裏看到一個問題。 – Kai 2011-12-25 09:53:42

相關問題