繁体   English   中英

如何修复FTPClient的异常?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM