Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Android中使用FtpClient从FTP下载文件不起作用_Java_Android_Ftp_Server_Ftp Client - Fatal编程技术网

Java 在Android中使用FtpClient从FTP下载文件不起作用

Java 在Android中使用FtpClient从FTP下载文件不起作用,java,android,ftp,server,ftp-client,Java,Android,Ftp,Server,Ftp Client,我正在尝试使用Android中的FTPClient从FTP下载一个文件。我能够成功登录到FTP,但当我运行下载代码时,什么也没有发生。在我的“下载”文件夹中创建的文件是空白的0kb文件 这是我的密码: public class DownloadConfigFromFTP extends AsyncTask<String, Void, String> { private Context context; private ProgressDialog pr

我正在尝试使用Android中的FTPClient从FTP下载一个文件。我能够成功登录到FTP,但当我运行下载代码时,什么也没有发生。在我的“下载”文件夹中创建的文件是空白的0kb文件

这是我的密码:

public class DownloadConfigFromFTP extends AsyncTask<String, Void, String> {
        private Context context;
        private ProgressDialog progressDialog;

        public DownloadConfigFromFTP(Context context) {
            this.context = context;
            this.progressDialog = new ProgressDialog(context);
            this.progressDialog.setCancelable(false);
            this.progressDialog.setMessage("Please wait...");
            this.progressDialog.show();

        }

        protected void onPreExecute() {
        }

        @Override
        protected String doInBackground(String... arg0) {
            String server = "serveraddress";
            int port = 21;
            String user = arg0[0];
            String pass = arg0[1];

            FTPClient ftpClient = new FTPClient();
            try {
                ftpClient.connect(server, port);
                ftpClient.login(user, pass);
                ftpClient.enterLocalPassiveMode();
                ftpClient.setFileType(FTP.BINARY_FILE_TYPE);

                if (ftpClient.isConnected())
                    Log.d("status", "status: " + ftpClient.getStatus());


                String remoteFile1 = "config.txt";
                File downloadFile1 = new File(
                        Environment.getExternalStorageDirectory()
                                + "/downloads/config.txt");
                if (!downloadFile1.getParentFile().exists())
                    downloadFile1.getParentFile().mkdirs();
                OutputStream outputStream1 = new BufferedOutputStream(
                        new FileOutputStream(downloadFile1));
                boolean success = ftpClient.retrieveFile(remoteFile1,
                        outputStream1);
                outputStream1.close();

                if (success) {
                    Log.d(TAG, "Config file has been downloaded successfully.");
                } else {
                    Log.d(TAG, "Config file download failed.");
                }
            } catch (IOException ex) {
                System.out.println("Error: " + ex.getMessage());
                ex.printStackTrace();
            } finally {
                try {
                    if (ftpClient.isConnected()) {
                        ftpClient.logout();
                        ftpClient.disconnect();
                    }

                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }

            return null;
        }

        @Override
        protected void onProgressUpdate(Void... values) {
            super.onProgressUpdate(values);
        }

        @Override
        protected void onPostExecute(String result) {
            if (this.progressDialog != null) {
                this.progressDialog.dismiss();
            }
        }
    }
经过长时间的等待,我在Logcat中得到了以下信息:

03-19 10:31:12.755: W/System.err(25790): java.net.SocketException: recvfrom failed: ETIMEDOUT (Connection timed out)
03-19 10:31:12.929: W/System.err(25790):    at libcore.io.IoBridge.maybeThrowAfterRecvfrom(IoBridge.java:545)
03-19 10:31:12.931: W/System.err(25790):    at libcore.io.IoBridge.recvfrom(IoBridge.java:509)
03-19 10:31:12.931: W/System.err(25790):    at java.net.PlainSocketImpl.read(PlainSocketImpl.java:489)
03-19 10:31:12.932: W/System.err(25790):    at java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:46)
03-19 10:31:12.932: W/System.err(25790):    at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:241)
03-19 10:31:12.932: W/System.err(25790):    at java.io.InputStream.read(InputStream.java:162)
03-19 10:31:12.932: W/System.err(25790):    at java.io.BufferedInputStream.fillbuf(BufferedInputStream.java:142)
03-19 10:31:13.025: W/System.err(25790):    at java.io.BufferedInputStream.read(BufferedInputStream.java:227)
03-19 10:31:13.026: W/System.err(25790):    at java.io.PushbackInputStream.read(PushbackInputStream.java:146)
03-19 10:31:13.027: W/System.err(25790):    at org.apache.commons.net.io.FromNetASCIIInputStream.__read(FromNetASCIIInputStream.java:75)
03-19 10:31:13.027: W/System.err(25790):    at org.apache.commons.net.io.FromNetASCIIInputStream.read(FromNetASCIIInputStream.java:170)
03-19 10:31:13.031: W/System.err(25790):    at org.apache.commons.net.io.FromNetASCIIInputStream.read(FromNetASCIIInputStream.java:134)
03-19 10:31:13.061: W/System.err(25790):    at java.io.BufferedInputStream.fillbuf(BufferedInputStream.java:142)
03-19 10:31:13.066: W/System.err(25790):    at java.io.BufferedInputStream.read(BufferedInputStream.java:227)
03-19 10:31:13.072: W/System.err(25790):    at org.apache.commons.net.telnet.TelnetInputStream.__read(TelnetInputStream.java:114)
03-19 10:31:13.081: W/System.err(25790):    at org.apache.commons.net.telnet.TelnetInputStream.run(TelnetInputStream.java:535)
03-19 10:31:13.081: W/System.err(25790):    at java.lang.Thread.run(Thread.java:841)
03-19 10:31:13.081: W/System.err(25790): Caused by: libcore.io.ErrnoException: recvfrom failed: ETIMEDOUT (Connection timed out)
03-19 10:31:13.103: W/System.err(25790):    at libcore.io.Posix.recvfromBytes(Native Method)
03-19 10:31:13.104: W/System.err(25790):    at libcore.io.Posix.recvfrom(Posix.java:141)
03-19 10:31:13.104: W/System.err(25790):    at libcore.io.BlockGuardOs.recvfrom(BlockGuardOs.java:164)
03-19 10:31:13.106: W/System.err(25790):    at libcore.io.IoBridge.recvfrom(IoBridge.java:506)
03-19 10:31:13.106: W/System.err(25790):    ... 15 more
03-19 10:31:13.108: W/System.err(25790): java.net.SocketException: sendto failed: EPIPE (Broken pipe)
03-19 10:31:13.112: W/System.err(25790):    at libcore.io.IoBridge.maybeThrowAfterSendto(IoBridge.java:499)
03-19 10:31:13.130: W/System.err(25790):    at libcore.io.IoBridge.sendto(IoBridge.java:468)
03-19 10:31:13.156: W/System.err(25790):    at java.net.PlainSocketImpl.write(PlainSocketImpl.java:508)
03-19 10:31:13.156: W/System.err(25790):    at java.net.PlainSocketImpl.access$100(PlainSocketImpl.java:46)
03-19 10:31:13.156: W/System.err(25790):    at java.net.PlainSocketImpl$PlainSocketOutputStream.write(PlainSocketImpl.java:270)
03-19 10:31:13.159: W/System.err(25790):    at java.io.BufferedOutputStream.flushInternal(BufferedOutputStream.java:185)
03-19 10:31:13.159: W/System.err(25790):    at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:85)
03-19 10:31:13.160: W/System.err(25790):    at org.apache.commons.net.telnet.TelnetClient._flushOutputStream(TelnetClient.java:77)
03-19 10:31:13.160: W/System.err(25790):    at org.apache.commons.net.telnet.TelnetOutputStream.flush(TelnetOutputStream.java:137)
03-19 10:31:13.161: W/System.err(25790):    at java.io.FilterOutputStream.flush(FilterOutputStream.java:88)
03-19 10:31:13.161: W/System.err(25790):    at java.io.OutputStreamWriter.flushBytes(OutputStreamWriter.java:171)
03-19 10:31:13.213: W/System.err(25790):    at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:158)
03-19 10:31:13.243: W/System.err(25790):    at java.io.BufferedWriter.flush(BufferedWriter.java:124)
03-19 10:31:13.245: W/System.err(25790):    at org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:442)
03-19 10:31:13.245: W/System.err(25790):    at org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:520)
03-19 10:31:13.248: W/System.err(25790):    at org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:569)
03-19 10:31:13.248: W/System.err(25790):    at org.apache.commons.net.ftp.FTP.quit(FTP.java:781)
03-19 10:31:13.248: W/System.err(25790):    at org.apache.commons.net.ftp.FTPClient.logout(FTPClient.java:706)
03-19 10:31:13.249: W/System.err(25790):    at com.avidishi.downloader.MainActivity$DownloadConfigFromFTP.doInBackground(MainActivity.java:168)
03-19 10:31:13.259: W/System.err(25790):    at com.avidishi.downloader.MainActivity$DownloadConfigFromFTP.doInBackground(MainActivity.java:1)
03-19 10:31:13.259: W/System.err(25790):    at android.os.AsyncTask$2.call(AsyncTask.java:288)
03-19 10:31:13.260: W/System.err(25790):    at java.util.concurrent.FutureTask.run(FutureTask.java:237)
03-19 10:31:13.261: W/System.err(25790):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
03-19 10:31:13.261: W/System.err(25790):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
03-19 10:31:13.263: W/System.err(25790):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
03-19 10:31:13.317: W/System.err(25790):    at java.lang.Thread.run(Thread.java:841)
03-19 10:31:13.338: W/System.err(25790): Caused by: libcore.io.ErrnoException: sendto failed: EPIPE (Broken pipe)
03-19 10:31:13.379: W/System.err(25790):    at libcore.io.Posix.sendtoBytes(Native Method)
03-19 10:31:13.380: W/System.err(25790):    at libcore.io.Posix.sendto(Posix.java:156)
03-19 10:31:13.415: W/System.err(25790):    at libcore.io.BlockGuardOs.sendto(BlockGuardOs.java:177)
03-19 10:31:13.423: W/System.err(25790):    at libcore.io.IoBridge.sendto(IoBridge.java:466)
03-19 10:31:13.423: W/System.err(25790):    ... 24 more
我又尝试了一次,但出现以下错误:

03-19 10:51:25.873: I/System.out(12809): Error: failed to connect to ec2-54-214-84-134.us-west-2.compute.amazonaws.com/54.214.84.134 (port 21): connect failed: ETIMEDOUT (Connection timed out)
03-19 10:51:25.874: W/System.err(12809): java.net.ConnectException: failed to connect to ec2-54-214-84-134.us-west-2.compute.amazonaws.com/54.214.84.134 (port 21): connect failed: ETIMEDOUT (Connection timed out)
03-19 10:51:25.875: W/System.err(12809):    at libcore.io.IoBridge.connect(IoBridge.java:114)
03-19 10:51:25.875: W/System.err(12809):    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
03-19 10:51:25.875: W/System.err(12809):    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
03-19 10:51:25.875: W/System.err(12809):    at java.net.Socket.startupSocket(Socket.java:566)
03-19 10:51:25.876: W/System.err(12809):    at java.net.Socket.tryAllAddresses(Socket.java:128)
03-19 10:51:25.876: W/System.err(12809):    at java.net.Socket.<init>(Socket.java:178)
03-19 10:51:25.876: W/System.err(12809):    at java.net.Socket.<init>(Socket.java:150)
03-19 10:51:25.876: W/System.err(12809):    at org.apache.commons.net.DefaultSocketFactory.createSocket(DefaultSocketFactory.java:53)
03-19 10:51:25.877: W/System.err(12809):    at org.apache.commons.net.SocketClient.connect(SocketClient.java:162)
03-19 10:51:25.877: W/System.err(12809):    at com.avidishi.downloader.MainActivity$DownloadConfigFromFTP.doInBackground(MainActivity.java:96)
03-19 10:51:25.877: W/System.err(12809):    at com.avidishi.downloader.MainActivity$DownloadConfigFromFTP.doInBackground(MainActivity.java:1)
03-19 10:51:25.877: W/System.err(12809):    at android.os.AsyncTask$2.call(AsyncTask.java:288)
03-19 10:51:25.878: W/System.err(12809):    at java.util.concurrent.FutureTask.run(FutureTask.java:237)
03-19 10:51:25.878: W/System.err(12809):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
03-19 10:51:25.878: W/System.err(12809):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
03-19 10:51:25.878: W/System.err(12809):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
03-19 10:51:25.878: W/System.err(12809):    at java.lang.Thread.run(Thread.java:841)
03-19 10:51:25.878: W/System.err(12809): Caused by: libcore.io.ErrnoException: connect failed: ETIMEDOUT (Connection timed out)
03-19 10:51:25.879: W/System.err(12809):    at libcore.io.Posix.connect(Native Method)
03-19 10:51:25.880: W/System.err(12809):    at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:85)
03-19 10:51:25.880: W/System.err(12809):    at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
03-19 10:51:25.880: W/System.err(12809):    at libcore.io.IoBridge.connect(IoBridge.java:112)
03-19 10:51:25.881: W/System.err(12809):    ... 16 more
03-19 10:51:25.873:I/System.out(12809):错误:无法连接到ec2-54-214-84-134.us-west-2.compute.amazonaws.com/54.214.84.134(端口21):连接失败:ETIMEDOUT(连接超时)
03-19 10:51:25.874:W/System.err(12809):java.net.ConnectException:无法连接到ec2-54-214-84-134.us-west-2.compute.amazonaws.com/54.214.84.134(端口21):连接失败:ETIMEDOUT(连接超时)
03-19 10:51:25.875:W/System.err(12809):位于libcore.io.IoBridge.connect(IoBridge.java:114)
03-19 10:51:25.875:W/System.err(12809):位于java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
03-19 10:51:25.875:W/System.err(12809):位于java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
03-19 10:51:25.875:W/System.err(12809):位于java.net.Socket.startupSocket(Socket.java:566)
03-19 10:51:25.876:W/System.err(12809):位于java.net.Socket.tryalladdress(Socket.java:128)
03-19 10:51:25.876:W/System.err(12809):位于java.net.Socket(Socket.java:178)
03-19 10:51:25.876:W/System.err(12809):位于java.net.Socket(Socket.java:150)
03-19 10:51:25.876:W/System.err(12809):位于org.apache.commons.net.DefaultSocketFactory.createSocket(DefaultSocketFactory.java:53)
03-19 10:51:25.877:W/System.err(12809):位于org.apache.commons.net.SocketClient.connect(SocketClient.java:162)
03-19 10:51:25.877:W/System.err(12809):在com.avidishi.downloader.MainActivity$DownloadConfigFromFTP.doInBackground(MainActivity.java:96)
03-19 10:51:25.877:W/System.err(12809):在com.avidishi.downloader.MainActivity$DownloadConfigFromFTP.doInBackground(MainActivity.java:1)
03-19 10:51:25.877:W/System.err(12809):在android.os.AsyncTask$2.call(AsyncTask.java:288)
03-19 10:51:25.878:W/System.err(12809):位于java.util.concurrent.FutureTask.run(FutureTask.java:237)
03-19 10:51:25.878:W/System.err(12809):在android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
03-19 10:51:25.878:W/System.err(12809):位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
03-19 10:51:25.878:W/System.err(12809):位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
03-19 10:51:25.878:W/System.err(12809):位于java.lang.Thread.run(Thread.java:841)
03-19 10:51:25.878:W/System.err(12809):原因:libcore.io.ErrnoException:连接失败:ETIMEDOUT(连接超时)
03-19 10:51:25.879:W/System.err(12809):位于libcore.io.Posix.connect(本机方法)
03-19 10:51:25.880:W/System.err(12809):位于libcore.io.BlockGuardOs.connect(BlockGuardOs.java:85)
03-19 10:51:25.880:W/System.err(12809):位于libcore.io.IoBridge.connectErrno(IoBridge.java:127)
03-19 10:51:25.880:W/System.err(12809):位于libcore.io.IoBridge.connect(IoBridge.java:112)
03-19 10:51:25.881:W/系统错误(12809):。。。还有16个

错误是什么?您的设备中是否有足够的空间?我尝试下载的文件是10kb文件,并且设备有足够的空间。问题是该文件无法下载。我在logcat中也没有看到任何错误。代码就停在这个地方,没有进一步的说明。我想你必须把你下载的文件放到/downloads文件夹中,那么为什么还要在那之后添加config.txt。你在测试什么样的互联网连接?Wifi还是移动数据?如果您使用wifi,可能会有下载限制。@史密斯先生:我使用的是移动连接。我也试过不同的手机,但问题是一样的。服务器是否有任何问题?
03-19 10:51:25.873: I/System.out(12809): Error: failed to connect to ec2-54-214-84-134.us-west-2.compute.amazonaws.com/54.214.84.134 (port 21): connect failed: ETIMEDOUT (Connection timed out)
03-19 10:51:25.874: W/System.err(12809): java.net.ConnectException: failed to connect to ec2-54-214-84-134.us-west-2.compute.amazonaws.com/54.214.84.134 (port 21): connect failed: ETIMEDOUT (Connection timed out)
03-19 10:51:25.875: W/System.err(12809):    at libcore.io.IoBridge.connect(IoBridge.java:114)
03-19 10:51:25.875: W/System.err(12809):    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
03-19 10:51:25.875: W/System.err(12809):    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
03-19 10:51:25.875: W/System.err(12809):    at java.net.Socket.startupSocket(Socket.java:566)
03-19 10:51:25.876: W/System.err(12809):    at java.net.Socket.tryAllAddresses(Socket.java:128)
03-19 10:51:25.876: W/System.err(12809):    at java.net.Socket.<init>(Socket.java:178)
03-19 10:51:25.876: W/System.err(12809):    at java.net.Socket.<init>(Socket.java:150)
03-19 10:51:25.876: W/System.err(12809):    at org.apache.commons.net.DefaultSocketFactory.createSocket(DefaultSocketFactory.java:53)
03-19 10:51:25.877: W/System.err(12809):    at org.apache.commons.net.SocketClient.connect(SocketClient.java:162)
03-19 10:51:25.877: W/System.err(12809):    at com.avidishi.downloader.MainActivity$DownloadConfigFromFTP.doInBackground(MainActivity.java:96)
03-19 10:51:25.877: W/System.err(12809):    at com.avidishi.downloader.MainActivity$DownloadConfigFromFTP.doInBackground(MainActivity.java:1)
03-19 10:51:25.877: W/System.err(12809):    at android.os.AsyncTask$2.call(AsyncTask.java:288)
03-19 10:51:25.878: W/System.err(12809):    at java.util.concurrent.FutureTask.run(FutureTask.java:237)
03-19 10:51:25.878: W/System.err(12809):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
03-19 10:51:25.878: W/System.err(12809):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
03-19 10:51:25.878: W/System.err(12809):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
03-19 10:51:25.878: W/System.err(12809):    at java.lang.Thread.run(Thread.java:841)
03-19 10:51:25.878: W/System.err(12809): Caused by: libcore.io.ErrnoException: connect failed: ETIMEDOUT (Connection timed out)
03-19 10:51:25.879: W/System.err(12809):    at libcore.io.Posix.connect(Native Method)
03-19 10:51:25.880: W/System.err(12809):    at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:85)
03-19 10:51:25.880: W/System.err(12809):    at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
03-19 10:51:25.880: W/System.err(12809):    at libcore.io.IoBridge.connect(IoBridge.java:112)
03-19 10:51:25.881: W/System.err(12809):    ... 16 more