2012-06-12 5 views
3

я пытаюсь загрузить файлы через FTP, но retrieveFileStream возвращение нулевой, я проверил getReplyString и вернуть 200, это мой код:InputStream возвращают нуль

File file = new File(this.config.getDestDirectory() + File.separator + fileName); 
String t = this.ftp.getReplyString(); 
InputStream in = this.ftp.retrieveFileStream(fileName); 
FileOutputStream fos = new FileOutputStream(file); 
StreamUtils.copy(in, fos); 
in.close(); 
fos.close(); 

Любое предложение?

Спасибо вам большое.

+3

Ваш InputStream смотрит на 'fileName', а не на' файл'. Это предназначено? –

+1

Что такое «ftp» и откуда оно взялось? –

+0

Благодарим за ответ, да, в соответствии с API, параметр retrieveFileStream - это имя удаленного файла, а в моем файле кода - директория out: FileOutputStream fos = new FileOutputStream (файл); – Jjreina

ответ

-1

Здесь вы можете увидеть, когда этот метод возвращает нуль: http://commons.apache.org/net/api-3.1/src-html/org/apache/commons/net/ftp/FTPClient.html#line.1742

+0

downvoting, потому что это ответ только для ссылки, и ссылка сейчас мертва. X ( – d3m0li5h3r

+0

Как я мог найти из источников, «null возвращается, если ошибка протокола FTP сообщается в любой момент во время установления и инициализации соединения». См. Org.apache.commons.net.ftp.FTPClient # _openDataConnection_ (String, String) – iozee

0

Попробуйте этот способ .. Его пример из моего кода базы, я использовал с открытым исходным кодом Apache Commons-Net-FTP-2.0.

public void goforIt() 
{ 
    FTPClient con = null; 

    try 
    { 
     con = new FTPClient(); 
     con.connect("10.0.0.1");  // Dummy address 

     if (con.login("Administrator", "KUjWbk361wobbyl")) 
     { 
      con.enterLocalPassiveMode(); // important! 
      con.setFileType(FTP.BINARY_FILE_TYPE); 
      String data = "/sdcard/2prerakm4a.m4a"; 

      OutputStream out = new FileOutputStream(new File(data)); 
      boolean result = con.retrieveFile("prerakm4a.m4a", out); 
      out.close(); 
      if (result) Log.v("download result", "succeeded"); 
      con.logout(); 
      con.disconnect(); 
     } 
    } 
    catch (Exception e) 
    { 
     Log.v("download result","failed"); 
     e.printStackTrace(); 
    } 
} 
0

AFAIK. Предположим, вы завершили передачу файлов, вызвав completePendingCommand() и проверив, что передача действительно успешна. т. е. вам нужно добавить функцию вызова ниже fos.clos().

fos.close(); client.completePendingCommand()

это должно было сделать! Вы также можете рассмотреть это, в соответствии с API для FTPClient.retrieveFileStream(), метод возвращает null, когда он не может открыть соединение для передачи данных, и в этом случае вы должны проверить код ответа (например, getReplyCode(), getReplyString(), getReplyStrings()), чтобы понять, почему это не удалось.

0

enter image description here

Если вы уже проверили все выше ответ и еще имеющую проблему, просто проверить выше настройки под источником. Если у вас есть Исключено: **, то ни один из файлов не будет доступен, если вы просто удалите это ** из параметра «Редактировать», ваш код должен работать. У меня есть

Смежные вопросы