2014-06-11 2 views
0

FTPClient을 사용하여 ftp 서버에 액세스하고 있습니다. 그리고 이것은 내가하는 방법입니다.FTP 연결을 사용하는 동안 NullPointer

public static void main(String[] args) { 
     FTPClient ftpClient = new FTPClient(); 
     try { 
      String SERVER = "10.67.192.18"; 
      String USER = "user"; 
      String PASS = "pass"; 
      String DIR = "/reports/ClientSessions/"; 
      ftpClient.connect(SERVER, 21); 
      ftpClient.login(USER, PASS); 
      ftpClient.enterLocalPassiveMode(); 
      ftpClient.setFileType(org.apache.commons.net.ftp.FTP.BINARY_FILE_TYPE); 
      InputStream io1 = ftpClient.retrieveFileStream(DIR + "filename1.csv"); 
      System.out.println(io1); 
      io1.close(); 
      InputStream io2 = ftpClient.retrieveFileStream(DIR + "filename1.csv"); 
      System.out.println(io2); 
      io2.close(); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } finally { 
      try { 

       ftpClient.logout(); 
       ftpClient.disconnect(); 


      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

두 번째 InputStream은 null입니다. 먼저 InputStream에 주석을 달면 코드가 잘 실행됩니다. 뭐가 잘못 되었 니?

+0

파일이 없거나 읽을 수없는 것 같습니다. [documentation] (http://commons.apache.org/proper/commons-net/apidocs/org/apache/commons/net/ftp/FTPClient.html#retrieveFileStream (java.lang.String)) – Jens

+1

을 참조하십시오. 보세요 @ http://stackoverflow.com/questions/8257639/android-ftpclient-retrievefilestream-always-returns-null? – Smutje

+0

'451 요청 된 작업이 중단되었습니다. 처리 중 로컬 오류가 발생했습니다. – Tony

답변

1

공식 문서에서와 같이 : 은 파일이 발견되지 않으면 null이 반환됩니다. 또한 닫히면 InputStream 자체가 부모 데이터 연결 소켓을 닫습니다. 그래서 첫 번째 닫는 후 InputStream 연결 소켓도 닫혀 있습니다. finally 블록에서만 스트림을 종료합니다.

1

언제든지 발생합니까? Wikipedia의 List of FTP Return Codes에 따르면 "4xx는 일시적인 부정적 완료 응답입니다. 명령이 승인되지 않고 요청한 작업이 수행되지 않았지만 오류 조건은 일시적이며 작업을 다시 요청할 수 있습니다."

또한 csv는 바이너리로 간주됩니까? 유형을 FTP.ASCII_FILE_TYPE으로 설정하십시오.

JavaDocthis question에 따르면 단계가 없습니다.

completePendingCommand 전화 성공을 확인하기 위해 반환 값을 확인해야합니다 파일 전송을 마무리합니다.

+0

아니요. 아직도 NullPointer. – Tony

관련 문제