2014-09-29 89 views
-1

我尝试从ftp下载apk文件,但下载后无法打开该文件。
原始文件和下载的文件具有相同的大小。 即时通讯使用Apache公共。 我的代码:无法打开下载的文件

FTPClient ftpClient = new FTPClient(); 
     try{ 
      ftpClient.connect(mServer);   
      ftpClient.login(mUser, mPassword);    ftpClient.setFileType(FTP.BINARY_FILE_TYPE); 
      ftpClient.enterLocalPassiveMode(); 
      BufferedOutputStream FileStream = new BufferedOutputStream(new FileOutputStream(cestaLuHa),8*1024); 
      boolean status=ftpClient.retrieveFile("LuHa.apk", desFileStream); 
      if(status){ 
       result = "Downlaoded"; 
      } 
      FileStream.flush(); 
      ftpClient.logout(); 
      ftpClient.disconnect(); 
     } 
     catch (IOException e){ 
      result = "Error"; 
     } 

回答

0

首先下载文件;

FTPClient client = null; 
File ExternalDirectory = Environment.getExternalStorageDirectory(); 
File DownloadFile = new File(ExternalDirectory.getAbsoluteFile()+"//"+"file.apk"); 
    try { 
     client = new FTPClient(); 
     client.setControlEncoding("UTF-8"); 
     client.connect(mServer, 21); 
     client.login(mUser,mPassword); 
     client.enterLocalPassiveMode(); 
     client.setFileType(FTPClient.BINARY_FILE_TYPE); 
     OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(DownloadFile)); 
     boolean success = client.retrieveFile("//httpdocs//file.apk", outputStream); 
     if (!success) { 
      outputStream.close(); 
      Log.v("Download Status","Not Download"); 
     } else { 
      outputStream.close(); 
      Log.v("Download Status","Downloaded"); 
     } 

这是打开apk的第二部分;

Uri uri = Uri.fromFile(DownloadFile); 
Intent intent = new Intent(Intent.ACTION_VIEW); 
intent.setDataAndType(uri, "application/apk"); //Maybe it 's different check different website for this 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
context.startActivity(intent); 

最后一件事我必须说,你必须这样做的背景下,经过3.0的Android挡在前台的下载,你应该使用的AsyncTask这一点。 希望这会对你有所帮助

+0

这两个部分都很完美。谢谢。问题似乎是将下载的文件保存到内部存储器中。 – Oleg 2014-09-30 04:17:14

+0

没问题,祝你有美好的一天 – massaimara98 2014-09-30 04:18:24