我正在製作一個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());
}
請給我們看看代碼。 – Kai 2011-12-24 15:21:28
我編輯了代碼,請檢查它。 – user1078760 2011-12-24 15:36:05
hm,也許你可以設置ftpclient對象的套接字超時 – 2011-12-24 15:36:33