2013-05-17 46 views
0

我需要FTP下載和文件轉換爲字符串,像這樣:文件皈依不是內部工作循環

public static boolean leArquivos(String inicioArquivo) { 
    try { 
     FTPClient mFtp = new FTPClient(); 
     mFtp.connect(FTPHOST, PORTA); 
     mFtp.login(USUARIO, SENHA); 
     FTPFile[] ftpFiles = mFtp.listFiles(); 
     int length = ftpFiles.length; 
     for (int i = 0; i < length; i++) { 
      String nome = ftpFiles[i].getName(); 
      String[] itens = nome.split("_"); 
      boolean isFile = ftpFiles[i].isFile(); 
      String arquivo_id = itens[0]; 
      if (isFile && (arquivo_id.equals(inicioArquivo))) { 
       // the follow lines work if outside the for loop 
       InputStream inStream = mFtp.retrieveFileStream(nome.toString()); 
       String arquivoLido = convertStreamToString(inStream); 
       String[] arquivoLidoPartes = arquivoLido.split("#"); 
       Retorno.adicionaRegistro(nome, arquivoLidoPartes[0], arquivoLidoPartes[1], false); 
      } 
     } 
    } catch(Exception e) { 
     e.printStackTrace(); 
     return false; 
    } 
    return true; 
} 

這會讀「inicioArquivo_anything.txt」並投入一個字符串。 FTP和Registro.adicionaRegistro工作正常。 如果我將'if'內的4行移動到'for'循環之外,它適用於單個文件。 我需要爲幾個文件執行操作。

對不起不好英語(和壞的Java太)...

編輯

曾爲這樣

皈依代碼:

private static String convertStreamToString(InputStream is, FTPClient mFtp) throws IOException { // added the client 
    BufferedReader r = new BufferedReader(new InputStreamReader(is)); 
    StringBuilder total = new StringBuilder(); 
    String line; 
    while ((line = r.readLine()) != null) { 
     total.append(line); 
    } 
    r.close(); // close stream 
    is.close(); // close stream 
    mFtp.completePendingCommand(); 
    return total.toString(); 
} 

而改變這一點:

String arquivoLido = convertStreamToString(inStream, mFtp); 
inStream.close(); 

回答

2

作爲寫在API文檔,你必須關閉流(轉換後),並調用completePendingCommand方法來完成,並檢查傳輸的狀態:在你的程序

FTPClient.html#retrieveFileStream

而且,基礎知識:不要忘記關閉Streams!

+0

謝謝gma。作品! –

+0

不能達到我的低聲譽。不管怎麼說,還是要謝謝你。 –

+0

@Jairo Filho不是什麼大不了的;-) – gma