0

我正在制作一个 Android 应用程序,它可以使用FTPClient. 我使用FTPClientapache 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());
        }
4

1 回答 1

0

尝试删除递归并测试是否适用于一个目录。我不确定你是否可以使用FTPClient这种方式。

顺便说一句,在递归调用中,您传递了一个 achangeWorkingDirectory()不起作用的文件名。您还应该client.changeWorkingDirectory(directory);从循环中删除。在循环之前执行一次就足够了。

于 2011-12-24T15:58:56.420 回答