[英]How to fix exception of FTPClient?
我正在制作一个Android应用程序,可以使用FTPClient
将文件从服务器复制到SDCard。 我使用来自Apache Commons库的FTPClient
类。 但是服务器包含1000多个文件,当我尝试从服务器获取文件名时,出现SocketException
:“连接已重置”(此刻我有25个文件名)。 库的版本是3.0.1。 我该如何解决?
递归获取文件的功能:
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());
}
尝试删除递归并测试是否适用于一个目录。 我不确定是否可以使用FTPClient
。
顺便说一句,在递归调用中,您要传递一个文件名,而changeWorkingDirectory()
无法使用该文件名。 您还应该删除client.changeWorkingDirectory(directory);
从循环。 在循环之前执行一次就足够了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.