FTPClient
을 사용하여 서버에서 SDCard로 파일을 복사 할 수있는 Android 애플리케이션을 만들고 있습니다. 나는 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
코드를 편집했습니다. 확인하십시오. – user1078760
흠, 어쩌면 u는 ftpclient 객체에 대한 소켓 타임 아웃을 설정할 수 있습니다. –