2016-04-19 6 views
0

圧縮ファイルをプルしようとするとファイルが壊れています。ここに私が使用したコードがあります。私は何が間違っているのか理解できません。ファイルの形式は.zipで、内部にはXMLファイルがあります。リモートサーバーからXMLファイルをダウンロードすると、XMLファイルのタグが変更され、破損しているように見えます。Javaでftpを使用してファイルをダウンロードするとファイルが壊れています

public Boolean pullConfirmationsFTP(String host, String sftpUserName, String sftpPwd, 
     String sftpPort, String fromConfirmationDirectory, String archiveConfirmationDirectory, 
     String toDirectory) { 
    try { 

     // new ftp client 
     FTPClient ftp = new FTPClient(); 
     // try to connect 
     ftp.connect(host); 
     // login to server 
     if (!ftp.login(sftpUserName, sftpPwd)) { 
     ftp.logout(); 
     LOG4J.error("Authentication failed"); 
     } 
     int reply = ftp.getReplyCode(); 
     // FTPReply stores a set of constants for FTP reply codes. 
     if (!FTPReply.isPositiveCompletion(reply)) { 
     ftp.disconnect(); 
     } 

     // enter passive mode 
     ftp.enterLocalPassiveMode(); 

     // get system name 
     // System.out.println("Remote system is " + ftp.getSystemType()); 
     // change current directory 
     ftp.changeWorkingDirectory(fromConfirmationDirectory); 
     System.out.println("Current directory is " + ftp.printWorkingDirectory()); 

     // get list of filenames 
     FTPFile[] ftpFiles = ftp.listFiles(); 

     if (ftpFiles != null && ftpFiles.length > 0) { 
     // loop thru files 
     for (FTPFile file : ftpFiles) { 
      try{ 
      if (!file.isFile()) { 
      continue; 
      } 
      LOG4J.error("File is " + file.getName()); 
      // get output stream 
      OutputStream output; 
      output = new FileOutputStream(toDirectory + file.getName()); 
      // get the file from the remote system 
      ftp.retrieveFile(file.getName(), output); 

      // close output stream 
      output.close(); 

      // delete the file 
      ftp.deleteFile(file.getName()); 
      } 
      catch(Exception e) 
      { 
      LOG4J.error("Error in pushing file : ",e); 
      } 
     } 
     } 

     ftp.logout(); 
     ftp.disconnect(); 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
     LOG4J.error(ex); 
    } 

    return true; 
    } 

答えて

1

あなたは使用しているFTPClientは言っていませんが、私はそれがApacheコモンズから来たものと推測しています。 FTPClientため ドキュメントは言う:

それはFTP.ASCII_FILE_TYPE、FTP.NON_PRINT_TEXT_FORMAT、FTP.STREAM_TRANSFER_MODE、およびFTP.FILE_STRUCTUREを使用するためFTPClientのデフォルト設定です。 FTPClient.setFileType

:ZIPファイルは、あなたが

ftp.setFileType(FTP.BINARY_FILE_TYPE); 

APIを追加する必要がバイナリファイルであるため、直接サポートされている唯一のファイルタイプはFTP.ASCII_FILE_TYPEとFTP.BINARY_FILE_TYPE

です

関連する問題