2012-11-16 16 views
9

Jak mogę odczytać rozmiar pliku, który jest przechowywany na moim serwerze ftp? Nie lubię implementować innej biblioteki.Android: Jak mogę uzyskać rozmiar pliku FTP za pośrednictwem FTPClient?

Pracuję z commons-io-2.4 i commons-net-3,1

Odbierz i kod z talhakosen (dzięki!)

private long getFileSize(FTPClient ftp, String filePath) throws Exception { 
    long fileSize = 0; 
    FTPFile[] files = ftp.listFiles(filePath); 
    if (files.length == 1 && files[0].isFile()) { 
     fileSize = files[0].getSize(); 
    } 
    Log.i(TAG, "File size = " + fileSize); 
    return fileSize; 
} 

Odpowiedz

6

Cześć można użyć poniższy kod,

private void ftpDownload() { 
    FTPClient ftp = null; 
    try { 
     ftp = new FTPClient(); 
     ftp.connect(mServer); 

     try { 
      int reply = ftp.getReplyCode(); 
      if (!FTPReply.isPositiveCompletion(reply)) { 
       throw new Exception("Connect failed: " + ftp.getReplyString()); 
      } 
      if (!ftp.login(mUser, mPassword)) { 
       throw new Exception("Login failed: " + ftp.getReplyString()); 
      } 
      try { 
       ftp.enterLocalPassiveMode(); 
       if (!ftp.setFileType(FTP.BINARY_FILE_TYPE)) { 
        Log.e(TAG, "Setting binary file type failed."); 
       } 
       transferFile(ftp); 
      } catch(Exception e) { 
       handleThrowable(e); 
      } finally { 
       if (!ftp.logout()) { 
        Log.e(TAG, "Logout failed."); 
       } 
      } 
     } catch(Exception e) { 
      handleThrowable(e); 
     } finally { 
      ftp.disconnect(); 
     } 
    } catch(Exception e) { 
     handleThrowable(e); 
    } 
} 

private void transferFile(FTPClient ftp) throws Exception { 
    long fileSize = getFileSize(ftp, mFilePath); 
    InputStream is = retrieveFileStream(ftp, mFilePath); 
    downloadFile(is, buffer, fileSize); 
    is.close(); 

    if (!ftp.completePendingCommand()) { 
     throw new Exception("Pending command failed: " + ftp.getReplyString()); 
    } 
} 

private InputStream retrieveFileStream(FTPClient ftp, String filePath) 
throws Exception { 
    InputStream is = ftp.retrieveFileStream(filePath); 
    int reply = ftp.getReplyCode(); 
    if (is == null 
      || (!FTPReply.isPositivePreliminary(reply) 
        && !FTPReply.isPositiveCompletion(reply))) { 
     throw new Exception(ftp.getReplyString()); 
    } 
    return is; 
} 

private byte[] downloadFile(InputStream is, long fileSize) 
throws Exception { 
    byte[] buffer = new byte[fileSize]; 
    if (is.read(buffer, 0, buffer.length)) == -1) { 
     return null; 
    } 
    return buffer; // <-- Here is your file's contents !!! 
} 

private long getFileSize(FTPClient ftp, String filePath) throws Exception { 
    long fileSize = 0; 
    FTPFile[] files = ftp.listFiles(filePath); 
    if (files.length == 1 && files[0].isFile()) { 
     fileSize = files[0].getSize(); 
    } 
    Log.i(TAG, "File size = " + fileSize); 
    return fileSize; 
} 
+0

Dziękuję bardzo;) –

+0

kod doskonałymi dziękuję !! –

-3
private long getFileSize(FTPClient ftpClient, String fileName) throws Exception 
{ 
    long fileSize = 0; 
    String fileName; 
    //down file name 
    FTPFile[] files = ftpClient.listFiles(); //ftp list 
    for (i = 0; i < files.length; i++) 
    { //ftp connect forder in files    
     if (fileName == files[i].getName()) 
     { 
     fileSize = files[i].getSize(); 
     return fileSize; 
     } 
    }   
}   
Powiązane problemy