Как исправить исключение FTPClient? - PullRequest
0 голосов
/ 24 декабря 2011

Я создаю приложение для Android, которое может копировать файлы с сервера на SDCard, используя FTPClient.Я использую FTPClient класс из библиотеки Apache Commons.Но сервер содержит более 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());
        }

1 Ответ

0 голосов
/ 24 декабря 2011

Попробуйте удалить рекурсию и проверьте, работает ли один каталог.Я не уверен, что вы можете использовать FTPClient таким образом.

Кстати, при рекурсивном вызове вы передаете имя файла, для которого changeWorkingDirectory() не будет работать.Вы также должны удалить client.changeWorkingDirectory(directory); из цикла.Проделайте это один раз, прежде чем цикл будет достаточным.

...