我正在尝试通过我的应用程序从FTP下载文件。但我的祝酒词都没有表现出来。如何检查我是否已连接以及文件是否已下载?
代码:
package no.kraftpriser.oversikt;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.SocketException;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;
import org.apache.commons.net.PrintCommandListener;
import org.apache.commons.net.ftp.FTPClient;
public class KraftpriserActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
FTPClient ftp;
Context context = getApplicationContext();
int duration = Toast.LENGTH_SHORT;
int duration2 = Toast.LENGTH_LONG;
ftp = new FTPClient();
ftp.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out)));
try {
int reply;
String server = "62.97.235.213";
int port = 21;
ftp.connect(server, port);
ftp.login("anonymous","nobody");
ftp.enterLocalPassiveMode();
ftp.changeWorkingDirectory("/Fastpris");
InputStream inStream = ftp.retrieveFileStream("2011.txt");
CharSequence tilkoblet = "Connected!";
Toast toastTilkoblet = Toast.makeText(context, tilkoblet, duration2);
toastTilkoblet.show();
reply = ftp.getReplyCode();
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
if (ftp.isConnected()) {
try {
ftp.disconnect();
}
catch (IOException f) {
//Do nothing
}
}
CharSequence ikkeTikoblet = "Kunne ikke koble til server";
Toast toastIkkeTilkoblet = Toast.makeText(context, ikkeTikoblet, duration);
toastIkkeTilkoblet.show();
e.printStackTrace();
}
}
}
答案 0 :(得分:0)
在传输完成之前,您的“已连接”吐司不会显示,因为getFileAsStream将阻止,直到传输完成。此外,您只是将文件加载到上面代码中的InputStream中...如果您想将其保存到SD卡或内部存储中,您仍需要将该输入流写入文件。
为了能够看到下载的进度,您需要在后台线程中进行实际下载(使用AsyncTask)。然后,您可以通过onProgressUpdate方法将状态更新发布回UI线程。
根据您使用的FTP客户端,您还可以检查connect和/或login方法的返回值,以查看每个操作是否成功。