Java Android ftp下载不';t正确下载文件
我是android编程新手。我需要从ftp服务器下载视频、JPG和PDF到我的android设备 这是我在一个线程中的下载代码Java Android ftp下载不';t正确下载文件,java,android,ftp,Java,Android,Ftp,我是android编程新手。我需要从ftp服务器下载视频、JPG和PDF到我的android设备 这是我在一个线程中的下载代码 MyFTPClient ftpclient=null; ftpclient = new MyFTPClient(); status = ftpclient.ftpConnect("xxx.xxx.xxx.xxx", "username", "password", 21); if (status == true) {
MyFTPClient ftpclient=null;
ftpclient = new MyFTPClient();
status = ftpclient.ftpConnect("xxx.xxx.xxx.xxx", "username", "password", 21);
if (status == true) {
Log.d(TAG, "Connection Success");
FTPFile[] filelist= ftpclient.ftpPrintFilesList("/httpdocs/");
for(int i=0;i<filelist.length;i++){
if(filelist[i].getType()==1)
{
File myFile = new File("/storage/sdcard0/App/"+filelist[i].getName());
if(!myFile.exists()){
File folder=new File("/storage/sdcard0/App/"+filelist[i].getName());
folder.mkdir();
}
}
else if(filelist[i].getType()==0)
{
ftpclient.ftpDownload("/httpdocs/"+filelist[i].getName(), "/storage/sdcard0/App/"+filelist[i].getName());
}
}
else {
Log.d(TAG, "Connection failed");
}
MyFTPClient-ftpclient=null;
ftpclient=新的MyFTPClient();
状态=ftpclient.ftpConnect(“xxx.xxx.xxx.xxx”,“用户名”,“密码”,21);
如果(状态==真){
Log.d(标记“连接成功”);
FTPFile[]filelist=ftpclient.ftpprintfilelist(“/httpdocs/”);
对于(int i=0;i为什么要在登录方法中设置此选项?mFTPClient.setFileType(FTP.ASCII_FILE_TYPE);应该在末尾保留为二进制…您可以发布用于打开下载文件的代码,或者发布有关错误的更多详细信息(stacktrace)吗?不,我正在尝试在设备上打开文件,而不是使用代码。为什么要在登录方法中设置此选项?mFTPClient.setFileType(FTP.ASCII_FILE_TYPE);最后应保留为二进制…@Martin您应该将您的评论作为答案。我打赌这是问题的解决方案。我找到了解决方案。谢谢大家。当我“mFTPClient.setFileType(FTP.BINARY_FILE_TYPE);”将这一行从ftpConnect函数放到ftpDownload函数,问题就解决了。
public boolean ftpConnect(String host, String username,
String password, int port)
{
try {
mFTPClient = new FTPClient();
mFTPClient.connect(host, port);
mFTPClient.setFileType(FTP.BINARY_FILE_TYPE);
if (FTPReply.isPositiveCompletion(mFTPClient.getReplyCode())) {
boolean status = mFTPClient.login(username, password);
mFTPClient.setFileType(FTP.ASCII_FILE_TYPE);
mFTPClient.enterLocalPassiveMode();
return status;
}
} catch(Exception e) {
Log.d(TAG, "Error: could not connect to host " + host+"Cause: "+e.getCause() );
}
return false;
}
public FTPFile[] ftpPrintFilesList(String dir_path)
{
try {
FTPFile[] ftpFiles = mFTPClient.listFiles(dir_path);
int length = ftpFiles.length;
for (int i = 0; i < length; i++) {
String name = ftpFiles[i].getName();
boolean isFile = ftpFiles[i].isFile();
if (isFile) {
Log.i(TAG, "File : " + name);
}
else {
Log.i(TAG, "Directory : " + name);
}
}
return ftpFiles;
} catch(Exception e) {
e.printStackTrace();
return null;
}
}
public boolean ftpDownload(String srcFilePath, String desFilePath)
{
boolean status = false;
try {
FileOutputStream desFileStream = new FileOutputStream(desFilePath);;
status = mFTPClient.retrieveFile(srcFilePath, desFileStream);
desFileStream.flush();
desFileStream.close();
return status;
} catch (Exception e) {
Log.d(TAG, "download failed");
}
return status;
}