Java Apache Commons FTP库-检索文件函数下载失败

Java Apache Commons FTP库-检索文件函数下载失败,java,Java,你能告诉我我做错了什么吗?调用retrieveFile后,此代码崩溃(异常e)。我正在尝试将一个文件从IIS FTP(我可以成功连接到该文件)下载到SD卡(.iso文件附在模拟器上)。FTP主目录中存在文件“test.txt”,printWorkingDirectory()显示“/”。我确实将权限写入清单,并尝试不使用.txt扩展名 try { File file = new File(Environment.getExternalStorageDirectory(), "test2.t

你能告诉我我做错了什么吗?调用retrieveFile后,此代码崩溃(异常e)。我正在尝试将一个文件从IIS FTP(我可以成功连接到该文件)下载到SD卡(.iso文件附在模拟器上)。FTP主目录中存在文件“test.txt”,printWorkingDirectory()显示“/”。我确实将权限写入清单,并尝试不使用.txt扩展名

try {
    File file = new File(Environment.getExternalStorageDirectory(), "test2.txt");
    Log.e(TAG, "1 " + Environment.getExternalStorageDirectory());
    file.mkdir();
    FileOutputStream desFileStream = new FileOutputStream(file);
    Log.e(TAG, "2 " + Environment.getExternalStorageDirectory());
    status = mFTPClient.retrieveFile("/"+"test.txt", desFileStream);
    Log.e(TAG, "3");
    desFileStream.close();

    return status;
} catch (Exception e) {
    Log.d(TAG, "download failed");
}
10-20 18:02:03.498:E/(1380):1/存储/SD卡
10-20 18:02:03.507:E/(1380):2/存储/SD卡
10-20 18:02:03.777:W/System.err(1380):java.net.ConnectException:无法连接到/127.0.0.1(端口63564):连接失败:EConrefused(连接被拒绝)
10-20 18:02:03.816:W/System.err(1380):位于libcore.io.IoBridge.connect(IoBridge.java:114)
10-20 18:02:03.816:W/System.err(1380):位于java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
10-20 18:02:03.847:W/System.err(1380):位于java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
10-20 18:02:03.847:W/System.err(1380):位于java.net.Socket.startupSocket(Socket.java:566)
10-20 18:02:03.867:W/System.err(1380):位于java.net.Socket.tryalladdress(Socket.java:127)
10-20 18:02:03.887:W/System.err(1380):位于java.net.Socket(Socket.java:177)
10-20 18:02:03.917:W/System.err(1380):位于java.net.Socket(Socket.java:149)
10-20 18:02:03.967:W/System.err(1380):位于javax.net.DefaultSocketFactory.createSocket(DefaultSocketFactory.java:40)
10-20 18:02:03.988:W/System.err(1380):位于org.apache.commons.net.ftp.FTPClient.openDataConnection(FTPClient.java:502)
10-20 18:02:04.029:W/System.err(1380):位于org.apache.commons.net.ftp.FTPClient.retrieveFile(FTPClient.java:1276)
10-20 18:02:04.083:W/System.err(1380):位于com.prgguru.android.FTP.ftpDownload(FTP.java:170)
10-20 18:02:04.156:W/System.err(1380):位于com.prgguru.android.Caller5.run(Caller5.java:28)
10-20 18:02:04.156:W/System.err(1380):由以下原因引起:libcore.io.ErrnoException:连接失败:EConrefused(连接被拒绝)
10-20 18:02:04.177:W/System.err(1380):位于libcore.io.Posix.connect(本机方法)
10-20 18:02:04.177:W/System.err(1380):位于libcore.io.BlockGuardOs.connect(BlockGuardOs.java:85)
10-20 18:02:04.197:W/System.err(1380):位于libcore.io.IoBridge.connectErrno(IoBridge.java:127)
10-20 18:02:04.197:W/System.err(1380):位于libcore.io.IoBridge.connect(IoBridge.java:112)
10-20 18:02:04.217:带系统错误(1380):。。。还有11个
10-20 18:02:04.217:E/(1380):下载失败



在调用retrieveFile之前,我如何连接到FTP:



数据的状态返回TRUE:



尝试了错误的密码-返回false。

您正在接受异常,而没有输出stacktrace。从这里开始,看看您实际收到的异常和错误消息的类型。请包括异常e的堆栈跟踪。您可以通过从异常对象调用printStackTrace()来实现这一点。确定-添加日志,它表示“连接到/127.0.0.1(端口63564)失败:连接失败:EconRefused(连接被拒绝)”但在调用retrieveFile之前,我通过上面附带的代码成功地连接到了emulator的localhost(127.0.0.1),即使我强迫emulator(成功地)连接到计算机的localhost(10.0.2.2),为什么这个应用程序稍后会尝试在emulator的localhost(127.0.0.1)上运行。一点线索也没有。
    public static boolean ftpConnect(String host, String username,
        String password, int port) {
    try {
        mFTPClient = new FTPClient();

        mFTPClient.connect(host, port);
        if (FTPReply.isPositiveCompletion(mFTPClient.getReplyCode())) {
            boolean status = mFTPClient.login(username, password);
            mFTPClient.enterLocalPassiveMode();
            mFTPClient.setFileTransferMode(org.apache.commons.net.ftp.FTP.BINARY_FILE_TYPE);

            return status;
        }
    } catch (Exception e) {
        Log.d(TAG, "Error: could not connect to host " + host);
    }

    return false;
}
private static String host = "10.0.2.2";
private static String user = "MyCorrectNickname";
private static String password = "CorrectPassword";