2012-07-30 43 views
1

我试图使用FTPS从FTP服务器上复制所有子目录和文件指定目录下到本地机器。我写的程序在轰炸前获得了一些子目录和文件。每次程序炸弹并不总是在同一个地方。我得到的代码和错误如下。任何想法如何让这个工作?递归复制子目录失败使用FTPS(可能握手问题?)

import org.apache.commons.net.PrintCommandListener; 
import org.apache.commons.net.ftp.FTP; 
import org.apache.commons.net.ftp.FTPConnectionClosedException; 
import org.apache.commons.net.ftp.FTPFile; 
import org.apache.commons.net.ftp.FTPReply; 
import org.apache.commons.net.ftp.FTPSClient; 

public class SaigFileBuilder { 

    private String server = "host"; 
    private String username = "user"; 
    private String password = "pass"; 
    private String remoteParentDir = "/prd/fa/out/FA003100/SAIG/"; 
    private String filesep = System.getProperty("file.separator"); 
    private String local = "c:" + filesep + "temp" + filesep + "saig_files"; 
    private List<String> fileList = null; 

    private boolean error = false; 
    private String protocol = "TLS"; // SSL/TLS 
    private FTPSClient ftps = null; 



    public static void main(String[] args) { 

     SaigFileBuilder fb = new SaigFileBuilder(); 

     try { 
      fb.getClientConnection();    
      fb.getFiles(false); 
      fb.logout(); 

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

     System.exit(fb.error ? 1 : 0); 
    } 



    private void getClientConnection() throws NoSuchAlgorithmException { 

     this.ftps = new FTPSClient(this.protocol); 
     this.ftps.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out))); 

     this.ftps = getConnection(server); 
     this.ftps = getLogin(username, password); 
    } 

    private FTPSClient getConnection(String server) { 

     try 
     { 
      int reply; 

      // Connect to the FTP server... 
      this.ftps.connect(server); 
      System.out.println("Connected to " + server + "."); 

      // Get connect reply code... 
      reply = this.ftps.getReplyCode(); 
      System.out.println("String reply: " + this.ftps.getReplyString()); 

      // Verify successful connection reply code was returned... 
      if (!FTPReply.isPositiveCompletion(reply)) 
      { 
       error = true; 
       System.err.println("FTP server refused connection."); 
       return null; 
      } 

      // FileZilla client issues following, so I will too.. 
      this.ftps.sendCommand("OPTS UTF8 ON"); 
      this.ftps.execPBSZ(0); 
      this.ftps.execPROT("P"); 
      this.ftps.enterLocalPassiveMode(); 
     } 
     catch (IOException e) 
     { 
      System.err.println("Could not connect to server."); 
      e.printStackTrace(); 
     } 
     return this.ftps;  
    } 


    private FTPSClient getLogin(String username, String password) { 

     try 
     { 
      this.ftps.setBufferSize(1000); 

      if (!this.ftps.login(username, password)) 
      { 
       System.out.println("Login failed"); 
       this.ftps.logout(); 
       return null; 
      } 

      System.out.println("Remote system is " + this.ftps.getSystemType()); 

     } 
     catch (FTPConnectionClosedException e) 
     { 
      error = true; 
      System.err.println("Server closed connection."); 
      e.printStackTrace(); 
     } 
     catch (IOException e) 
     { 
      error = true; 
      e.printStackTrace(); 
     } 

     return this.ftps; 
    } 



    private void getFiles(boolean binaryTransfer) { 
     try 
     { 
      if (binaryTransfer) { 
       this.ftps.setFileType(FTP.BINARY_FILE_TYPE); 
      } 

      OutputStream output = null; 

      this.ftps.changeWorkingDirectory(this.remoteParentDir); 
      System.out.println("pwd: " + this.ftps.printWorkingDirectory()); 

      this.fileList = new ArrayList<String>(); 
      scanDirTree(this.remoteParentDir); 

      System.out.println("Finished scanning..."); 
      for (String file : this.fileList) { 
      System.out.println(file); 
      } 

      String dirHold = " "; 
      String winDir = " "; 
      String winFile = " "; 

      for (String ftpFilePath : this.fileList) { 
       // Going to copy the remote dirs and files to local, so change the paths to 
       // use local Windows file separator instead of remote Unix... 
       winDir = ftpFilePath.substring(0, ftpFilePath.lastIndexOf("/") + 1).replace("/", filesep); 
       winFile = ftpFilePath.substring(ftpFilePath.lastIndexOf("/") + 1, ftpFilePath.length()); 
       System.out.println("winDir.: " + winDir); 
       System.out.println("winFile: " + winFile); 

       // If new dir found in list, then create it locally... 
       if (dirHold.equals(winDir) == false) { 
        System.out.println("mkdir: " + local + winDir); 
        new File(local + winDir).mkdirs(); 
        dirHold = winDir; 
       } 

       // And write the file locally... 
       System.out.println("Attempting to write: " + this.local + winDir + winFile); 
       output = new FileOutputStream(local + winDir + winFile); 
       this.ftps.retrieveFile(ftpFilePath, output); 

       output.close(); 
       output = null; 
      } 

     } 
     catch (FTPConnectionClosedException e) 
     { 
      error = true; 
      System.err.println("Server closed connection."); 
      e.printStackTrace(); 
     } 
     catch (IOException e) 
     { 
      error = true; 
      e.printStackTrace(); 
     } 
    } 


    private void scanDirTree(String directory) throws IOException { 
     // Create and return a list of all dirs and files on remote 
     // server below the parent dir that was passed to this method... 
     FTPFile[] files = this.ftps.listFiles(directory); 

     if (files.length == 0) { 
      System.out.println("no files in " + directory); 
     } 

     for (FTPFile file : files) { 
      String name = file.getName(); 


      if (!".".equals(name) && !"..".equals(name)) { 
       if (file.isDirectory()) { 
        // Recursive call, go deeper... 
        scanDirTree(directory + name + "/"); 
       } else { 
        fileList.add(directory + file.getName()); 
        System.out.println("Added: " + directory + file.getName()); 
       } 
      } 
     } 
    } 



    private void logout() { 

     if (this.ftps.isConnected()) { 
      try { 
       System.out.println("Logging out..."); 
       this.ftps.logout(); 
       System.out.println("Disconnecting..."); 
       this.ftps.disconnect(); 
      } 
      catch (IOException e) { 
       error = true; 

      } 
     } 
    } 
} 

以下是错误:

220 (vsFTPd 2.0.5) 
AUTH TLS 
234 Proceed with negotiation. 
Connected to xxx.xxx.xxx 
String reply: 234 Proceed with negotiation. 

OPTS UTF8 ON 
200 Always in UTF8 mode. 
PBSZ 0 
200 PBSZ set to 0. 
PROT P 
200 PROT now Private. 
USER xxx 
331 Please specify the password. 
PASS xxxx 
230 Login successful. 
SYST 
215 UNIX Type: L8 
Remote system is UNIX Type: L8 
CWD /prd/fa/out/FA003100/SAIG/ 
250 Directory successfully changed. 
PWD 
257 "/prd/fa/out/FA003100/SAIG" 
pwd: /prd/fa/out/FA003100/SAIG 
PASV 
227 Entering Passive Mode (xx,xx,xxx,x,197,29) 
LIST /prd/fa/out/FA003100/SAIG/ 
150 Here comes the directory listing. 
226 Directory send OK. 
PASV 
227 Entering Passive Mode (xx,xx,xxx,x,197,46) 
LIST /prd/fa/out/FA003100/SAIG/2012/ 
150 Here comes the directory listing. 
226 Directory send OK. 
PASV 
227 Entering Passive Mode (xx,xx,xxx,x,197,150) 
LIST /prd/fa/out/FA003100/SAIG/2012/DirectLoan/ 
150 Here comes the directory listing. 
226 Directory send OK. 
Added: /prd/fa/out/FA003100/SAIG/2012/DirectLoan/CRDL12IN-G.xml 
Added: /prd/fa/out/FA003100/SAIG/2012/DirectLoan/CRDL12IN-GCHG.xml 
Added: /prd/fa/out/FA003100/SAIG/2012/DirectLoan/CRDL12IN-GDISB.xml 
Added: /prd/fa/out/FA003100/SAIG/2012/DirectLoan/CRDL12IN-U.xml 
Added: /prd/fa/out/FA003100/SAIG/2012/DirectLoan/CRDL12IN-UCHG.xml 
Added: /prd/fa/out/FA003100/SAIG/2012/DirectLoan/CRDL12IN-UDISB.xml 
Added: /prd/fa/out/FA003100/SAIG/2012/DirectLoan/CRDL12IN.xml 
PASV 
227 Entering Passive Mode (xx,xx,xxx,x,196,232) 
LIST /prd/fa/out/FA003100/SAIG/2012/Isir/ 
150 Here comes the directory listing. 
226 Directory send OK. 
no files in /prd/fa/out/FA003100/SAIG/2012/Isir/ 
PASV 
227 Entering Passive Mode (xx,xx,xxx,x,196,254) 
LIST /prd/fa/out/FA003100/SAIG/2012/Pell/ 
150 Here comes the directory listing. 
226 Directory send OK. 
Added: /prd/fa/out/FA003100/SAIG/2012/Pell/CRPG12IN.xml 
Added: /prd/fa/out/FA003100/SAIG/2012/Pell/CRPG12IN_DISB.xml 
PASV 
227 Entering Passive Mode (xx,xx,xxx,x,197,5) 
LIST /prd/fa/out/FA003100/SAIG/2012/Teach/ 
150 Here comes the directory listing. 
226 Directory send OK. 
no files in /prd/fa/out/FA003100/SAIG/2012/Teach/ 
PASV 
227 Entering Passive Mode (xx,xx,xxx,x,197,66) 
LIST /prd/fa/out/FA003100/SAIG/2012/TrnsMonitor/ 
150 Here comes the directory listing. 
226 Directory send OK. 
Added: /prd/fa/out/FA003100/SAIG/2012/TrnsMonitor/TRNINFIN.01 
Added: /prd/fa/out/FA003100/SAIG/2012/TrnsMonitor/TRNINFIN.02 
Added: /prd/fa/out/FA003100/SAIG/2012/TrnsMonitor/TRNINFIN.03 
Added: /prd/fa/out/FA003100/SAIG/2012/TrnsMonitor/TRNINFIN.04 
Added: /prd/fa/out/FA003100/SAIG/2012/TrnsMonitor/TRNINFIN.05 
Added: /prd/fa/out/FA003100/SAIG/2012/TrnsMonitor/TRNINFIN.06 
Added: /prd/fa/out/FA003100/SAIG/2012/TrnsMonitor/TRNINFIN.07 
Added: /prd/fa/out/FA003100/SAIG/2012/TrnsMonitorTRNINFIN.01 
PASV 
227 Entering Passive Mode (xx,xx,xxx,x,197,3) 
LIST /prd/fa/out/FA003100/SAIG/2013/ 
150 Here comes the directory listing. 
226 Directory send OK. 
PASV 
227 Entering Passive Mode (xx,xx,xxx,x,196,230) 
LIST /prd/fa/out/FA003100/SAIG/2013/CommRec/ 
150 Here comes the directory listing. 
226 Directory send OK. 
no files in /prd/fa/out/FA003100/SAIG/2013/CommRec/ 
PASV 
227 Entering Passive Mode (xx,xx,xxx,x,197,135) 
LIST /prd/fa/out/FA003100/SAIG/2013/DLReconciliation/ 
150 Here comes the directory listing. 
226 Directory send OK. 
no files in /prd/fa/out/FA003100/SAIG/2013/DLReconciliation/ 
PASV 
227 Entering Passive Mode (xx,xx,xxx,x,197,124) 
LIST /prd/fa/out/FA003100/SAIG/2013/DirectLoan/ 
150 Here comes the directory listing. 
226 Directory send OK. 
Added: /prd/fa/out/FA003100/SAIG/2013/DirectLoan/CRDL13IN-G.xml 
Added: /prd/fa/out/FA003100/SAIG/2013/DirectLoan/CRDL13IN-GCHG.xml 
Added: /prd/fa/out/FA003100/SAIG/2013/DirectLoan/CRDL13IN-GDISB.xml 
Added: /prd/fa/out/FA003100/SAIG/2013/DirectLoan/CRDL13IN-U.xml 
Added: /prd/fa/out/FA003100/SAIG/2013/DirectLoan/CRDL13IN-UCHG.xml 
Added: /prd/fa/out/FA003100/SAIG/2013/DirectLoan/CRDL13IN-UDISB.xml 
PASV 
227 Entering Passive Mode (xx,xx,xxx,x,197,121) 
LIST /prd/fa/out/FA003100/SAIG/2013/Isir/ 
150 Here comes the directory listing. 
226 Directory send OK. 
Added: /prd/fa/out/FA003100/SAIG/2013/Isir/CORR13IN.001 
Added: /prd/fa/out/FA003100/SAIG/2013/Isir/CORR13IN.002 
Added: /prd/fa/out/FA003100/SAIG/2013/Isir/CORR13IN.003 
Added: /prd/fa/out/FA003100/SAIG/2013/Isir/CORR13IN.004 
Added: /prd/fa/out/FA003100/SAIG/2013/Isir/CORR13IN.005 
Added: /prd/fa/out/FA003100/SAIG/2013/Isir/CORR13IN.006 
PASV 
227 Entering Passive Mode (xx,xx,xxx,x,197,147) 
LIST /prd/fa/out/FA003100/SAIG/2013/Pell/ 
150 Here comes the directory listing. 
226 Directory send OK. 
Added: /prd/fa/out/FA003100/SAIG/2013/Pell/CRPG13IN.xml 
Added: /prd/fa/out/FA003100/SAIG/2013/Pell/CRPG13IN_DISB.xml 
PASV 
227 Entering Passive Mode (xx,xx,xxx,x,197,63) 
LIST /prd/fa/out/FA003100/SAIG/2013/SysGen/ 
150 Here comes the directory listing. 
226 Directory send OK. 
no files in /prd/fa/out/FA003100/SAIG/2013/SysGen/ 
PASV 
227 Entering Passive Mode (xx,xx,xxx,x,197,118) 
LIST /prd/fa/out/FA003100/SAIG/2013/TrnsMonitor/ 
150 Here comes the directory listing. 
226 Directory send OK. 
Added: /prd/fa/out/FA003100/SAIG/2013/TrnsMonitor/TRNINFIN.01 
Finished scanning... 
/prd/fa/out/FA003100/SAIG/2012/DirectLoan/CRDL12IN-G.xml 
/prd/fa/out/FA003100/SAIG/2012/DirectLoan/CRDL12IN-GCHG.xml 
/prd/fa/out/FA003100/SAIG/2012/DirectLoan/CRDL12IN-GDISB.xml 
/prd/fa/out/FA003100/SAIG/2012/DirectLoan/CRDL12IN-U.xml 
/prd/fa/out/FA003100/SAIG/2012/DirectLoan/CRDL12IN-UCHG.xml 
/prd/fa/out/FA003100/SAIG/2012/DirectLoan/CRDL12IN-UDISB.xml 
/prd/fa/out/FA003100/SAIG/2012/DirectLoan/CRDL12IN.xml 
/prd/fa/out/FA003100/SAIG/2012/Pell/CRPG12IN.xml 
/prd/fa/out/FA003100/SAIG/2012/Pell/CRPG12IN_DISB.xml 
/prd/fa/out/FA003100/SAIG/2012/TrnsMonitor/TRNINFIN.01 
/prd/fa/out/FA003100/SAIG/2012/TrnsMonitor/TRNINFIN.02 
/prd/fa/out/FA003100/SAIG/2012/TrnsMonitor/TRNINFIN.03 
/prd/fa/out/FA003100/SAIG/2012/TrnsMonitor/TRNINFIN.04 
/prd/fa/out/FA003100/SAIG/2012/TrnsMonitor/TRNINFIN.05 
/prd/fa/out/FA003100/SAIG/2012/TrnsMonitor/TRNINFIN.06 
/prd/fa/out/FA003100/SAIG/2012/TrnsMonitor/TRNINFIN.07 
/prd/fa/out/FA003100/SAIG/2012/TrnsMonitorTRNINFIN.01 
/prd/fa/out/FA003100/SAIG/2013/DirectLoan/CRDL13IN-G.xml 
/prd/fa/out/FA003100/SAIG/2013/DirectLoan/CRDL13IN-GCHG.xml 
/prd/fa/out/FA003100/SAIG/2013/DirectLoan/CRDL13IN-GDISB.xml 
/prd/fa/out/FA003100/SAIG/2013/DirectLoan/CRDL13IN-U.xml 
/prd/fa/out/FA003100/SAIG/2013/DirectLoan/CRDL13IN-UCHG.xml 
/prd/fa/out/FA003100/SAIG/2013/DirectLoan/CRDL13IN-UDISB.xml 
/prd/fa/out/FA003100/SAIG/2013/Isir/CORR13IN.001 
/prd/fa/out/FA003100/SAIG/2013/Isir/CORR13IN.002 
/prd/fa/out/FA003100/SAIG/2013/Isir/CORR13IN.003 
/prd/fa/out/FA003100/SAIG/2013/Isir/CORR13IN.004 
/prd/fa/out/FA003100/SAIG/2013/Isir/CORR13IN.005 
/prd/fa/out/FA003100/SAIG/2013/Isir/CORR13IN.006 
/prd/fa/out/FA003100/SAIG/2013/Pell/CRPG13IN.xml 
/prd/fa/out/FA003100/SAIG/2013/Pell/CRPG13IN_DISB.xml 
/prd/fa/out/FA003100/SAIG/2013/TrnsMonitor/TRNINFIN.01 
winDir.: \prd\fa\out\FA003100\SAIG\2012\DirectLoan\ 
winFile: CRDL12IN-G.xml 
mkdir: c:\temp\saig_files\prd\fa\out\FA003100\SAIG\2012\DirectLoan\ 
Attempting to write: c:\temp\saig_files\prd\fa\out\FA003100\SAIG\2012\DirectLoan\CRDL12IN-G.xml 
PASV 
227 Entering Passive Mode (xx,xx,xxx,x,197,16) 
RETR /prd/fa/out/FA003100/SAIG/2012/DirectLoan/CRDL12IN-G.xml 
150 Opening BINARY mode data connection for /prd/fa/out/FA003100/SAIG/2012/DirectLoan/CRDL12IN-G.xml (4561 bytes). 
226 File send OK. 
winDir.: \prd\fa\out\FA003100\SAIG\2012\DirectLoan\ 
winFile: CRDL12IN-GCHG.xml 
Attempting to write: c:\temp\saig_files\prd\fa\out\FA003100\SAIG\2012\DirectLoan\CRDL12IN-GCHG.xml 
PASV 
227 Entering Passive Mode (xx,xx,xxx,x,197,136) 
RETR /prd/fa/out/FA003100/SAIG/2012/DirectLoan/CRDL12IN-GCHG.xml 
150 Opening BINARY mode data connection for /prd/fa/out/FA003100/SAIG/2012/DirectLoan/CRDL12IN-GCHG.xml (9074 bytes). 
226 File send OK. 
winDir.: \prd\fa\out\FA003100\SAIG\2012\DirectLoan\ 
winFile: CRDL12IN-GDISB.xml 
Attempting to write: c:\temp\saig_files\prd\fa\out\FA003100\SAIG\2012\DirectLoan\CRDL12IN-GDISB.xml 
PASV 
227 Entering Passive Mode (xx,xx,xxx,x,196,239) 
RETR /prd/fa/out/FA003100/SAIG/2012/DirectLoan/CRDL12IN-GDISB.xml 
150 Opening BINARY mode data connection for /prd/fa/out/FA003100/SAIG/2012/DirectLoan/CRDL12IN-GDISB.xml (2047 bytes). 
226 File send OK. 
winDir.: \prd\fa\out\FA003100\SAIG\2012\DirectLoan\ 
winFile: CRDL12IN-U.xml 
Attempting to write: c:\temp\saig_files\prd\fa\out\FA003100\SAIG\2012\DirectLoan\CRDL12IN-U.xml 
PASV 
227 Entering Passive Mode (xx,xx,xxx,x,197,137) 
RETR /prd/fa/out/FA003100/SAIG/2012/DirectLoan/CRDL12IN-U.xml 
150 Opening BINARY mode data connection for /prd/fa/out/FA003100/SAIG/2012/DirectLoan/CRDL12IN-U.xml (3367 bytes). 
226 File send OK. 
winDir.: \prd\fa\out\FA003100\SAIG\2012\DirectLoan\ 
winFile: CRDL12IN-UCHG.xml 
Attempting to write: c:\temp\saig_files\prd\fa\out\FA003100\SAIG\2012\DirectLoan\CRDL12IN-UCHG.xml 
PASV 
227 Entering Passive Mode (xx,xx,xxx,x,196,243) 
RETR /prd/fa/out/FA003100/SAIG/2012/DirectLoan/CRDL12IN-UCHG.xml 
150 Opening BINARY mode data connection for /prd/fa/out/FA003100/SAIG/2012/DirectLoan/CRDL12IN-UCHG.xml (7503 bytes). 
226 File send OK. 
winDir.: \prd\fa\out\FA003100\SAIG\2012\DirectLoan\ 
winFile: CRDL12IN-UDISB.xml 
Attempting to write: c:\temp\saig_files\prd\fa\out\FA003100\SAIG\2012\DirectLoan\CRDL12IN-UDISB.xml 
PASV 
227 Entering Passive Mode (xx,xx,xxx,x,197,87) 
RETR /prd/fa/out/FA003100/SAIG/2012/DirectLoan/CRDL12IN-UDISB.xml 
150 Opening BINARY mode data connection for /prd/fa/out/FA003100/SAIG/2012/DirectLoan/CRDL12IN-UDISB.xml (2995 bytes). 
226 File send OK. 
winDir.: \prd\fa\out\FA003100\SAIG\2012\DirectLoan\ 
winFile: CRDL12IN.xml 
Attempting to write: c:\temp\saig_files\prd\fa\out\FA003100\SAIG\2012\DirectLoan\CRDL12IN.xml 
PASV 
227 Entering Passive Mode (xx,xx,xxx,x,196,251) 
RETR /prd/fa/out/FA003100/SAIG/2012/DirectLoan/CRDL12IN.xml 
150 Opening BINARY mode data connection for /prd/fa/out/FA003100/SAIG/2012/DirectLoan/CRDL12IN.xml (145846 bytes). 
226 File send OK. 
winDir.: \prd\fa\out\FA003100\SAIG\2012\Pell\ 
winFile: CRPG12IN.xml 
mkdir: c:\temp\saig_files\prd\fa\out\FA003100\SAIG\2012\Pell\ 
Attempting to write: c:\temp\saig_files\prd\fa\out\FA003100\SAIG\2012\Pell\CRPG12IN.xml 
PASV 
227 Entering Passive Mode (xx,xx,xxx,x,197,123) 
RETR /prd/fa/out/FA003100/SAIG/2012/Pell/CRPG12IN.xml 
150 Opening BINARY mode data connection for /prd/fa/out/FA003100/SAIG/2012/Pell/CRPG12IN.xml (2057 bytes). 
226 File send OK. 
winDir.: \prd\fa\out\FA003100\SAIG\2012\Pell\ 
winFile: CRPG12IN_DISB.xml 
Attempting to write: c:\temp\saig_files\prd\fa\out\FA003100\SAIG\2012\Pell\CRPG12IN_DISB.xml 
PASV 
227 Entering Passive Mode (xx,xx,xxx,x,197,21) 
RETR /prd/fa/out/FA003100/SAIG/2012/Pell/CRPG12IN_DISB.xml 
150 Opening BINARY mode data connection for /prd/fa/out/FA003100/SAIG/2012/Pell/CRPG12IN_DISB.xml (9709 bytes). 
226 File send OK. 
winDir.: \prd\fa\out\FA003100\SAIG\2012\TrnsMonitor\ 
winFile: TRNINFIN.01 
mkdir: c:\temp\saig_files\prd\fa\out\FA003100\SAIG\2012\TrnsMonitor\ 
Attempting to write: c:\temp\saig_files\prd\fa\out\FA003100\SAIG\2012\TrnsMonitor\TRNINFIN.01 
PASV 
227 Entering Passive Mode (xx,xx,xxx,x,197,119) 
RETR /prd/fa/out/FA003100/SAIG/2012/TrnsMonitor/TRNINFIN.01 
150 Opening BINARY mode data connection for /prd/fa/out/FA003100/SAIG/2012/TrnsMonitor/TRNINFIN.01 (453 bytes). 
226 File send OK. 
winDir.: \prd\fa\out\FA003100\SAIG\2012\TrnsMonitor\ 
winFile: TRNINFIN.02 
Attempting to write: c:\temp\saig_files\prd\fa\out\FA003100\SAIG\2012\TrnsMonitor\TRNINFIN.02 
PASV 
227 Entering Passive Mode (xx,xx,xxx,x,197,101) 
RETR /prd/fa/out/FA003100/SAIG/2012/TrnsMonitor/TRNINFIN.02 
150 Opening BINARY mode data connection for /prd/fa/out/FA003100/SAIG/2012/TrnsMonitor/TRNINFIN.02 (604 bytes). 
226 File send OK. 
winDir.: \prd\fa\out\FA003100\SAIG\2012\TrnsMonitor\ 
winFile: TRNINFIN.03 
Attempting to write: c:\temp\saig_files\prd\fa\out\FA003100\SAIG\2012\TrnsMonitor\TRNINFIN.03 
PASV 
227 Entering Passive Mode (xx,xx,xxx,x,197,109) 
RETR /prd/fa/out/FA003100/SAIG/2012/TrnsMonitor/TRNINFIN.03 
150 Opening BINARY mode data connection for /prd/fa/out/FA003100/SAIG/2012/TrnsMonitor/TRNINFIN.03 (453 bytes). 
226 File send OK. 
winDir.: \prd\fa\out\FA003100\SAIG\2012\TrnsMonitor\ 
winFile: TRNINFIN.04 
Attempting to write: c:\temp\saig_files\prd\fa\out\FA003100\SAIG\2012\TrnsMonitor\TRNINFIN.04 
PASV 
227 Entering Passive Mode (xx,xx,xxx,x,197,18) 
RETR /prd/fa/out/FA003100/SAIG/2012/TrnsMonitor/TRNINFIN.04 
150 Opening BINARY mode data connection for /prd/fa/out/FA003100/SAIG/2012/TrnsMonitor/TRNINFIN.04 (453 bytes). 
226 File send OK. 
winDir.: \prd\fa\out\FA003100\SAIG\2012\TrnsMonitor\ 
winFile: TRNINFIN.05 
Attempting to write: c:\temp\saig_files\prd\fa\out\FA003100\SAIG\2012\TrnsMonitor\TRNINFIN.05 
PASV 
227 Entering Passive Mode (xx,xx,xxx,x,197,84) 
RETR /prd/fa/out/FA003100/SAIG/2012/TrnsMonitor/TRNINFIN.05 
150 Opening BINARY mode data connection for /prd/fa/out/FA003100/SAIG/2012/TrnsMonitor/TRNINFIN.05 (604 bytes). 
226 File send OK. 
winDir.: \prd\fa\out\FA003100\SAIG\2012\TrnsMonitor\ 
winFile: TRNINFIN.06 
Attempting to write: c:\temp\saig_files\prd\fa\out\FA003100\SAIG\2012\TrnsMonitor\TRNINFIN.06 
PASV 
227 Entering Passive Mode (xx,xx,xxx,x,197,70) 
RETR /prd/fa/out/FA003100/SAIG/2012/TrnsMonitor/TRNINFIN.06 
150 Opening BINARY mode data connection for /prd/fa/out/FA003100/SAIG/2012/TrnsMonitor/TRNINFIN.06 (453 bytes). 
226 File send OK. 
winDir.: \prd\fa\out\FA003100\SAIG\2012\TrnsMonitor\ 
winFile: TRNINFIN.07 
Attempting to write: c:\temp\saig_files\prd\fa\out\FA003100\SAIG\2012\TrnsMonitor\TRNINFIN.07 
PASV 
227 Entering Passive Mode (xx,xx,xxx,x,197,119) 
RETR /prd/fa/out/FA003100/SAIG/2012/TrnsMonitor/TRNINFIN.07 
150 Opening BINARY mode data connection for /prd/fa/out/FA003100/SAIG/2012/TrnsMonitor/TRNINFIN.07 (3624 bytes). 
org.apache.commons.net.io.CopyStreamException: IOException caught while copying. 
    at org.apache.commons.net.io.Util.copyStream(Util.java:135) 
    at org.apache.commons.net.ftp.FTPClient._retrieveFile(FTPClient.java:1695) 
    at org.apache.commons.net.ftp.FTPClient.retrieveFile(FTPClient.java:1669) 
    at edu.ohio.saig.SaigFileBuilder.getFiles(SaigFileBuilder.java:196) 
    at edu.ohio.saig.SaigFileBuilder.main(SaigFileBuilder.java:63) 
Caused by: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake 
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(Unknown Source) 
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source) 
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readDataRecord(Unknown Source) 
    at com.sun.net.ssl.internal.ssl.AppInputStream.read(Unknown Source) 
    at java.io.BufferedInputStream.read1(Unknown Source) 
    at java.io.BufferedInputStream.read(Unknown Source) 
    at java.io.FilterInputStream.read(Unknown Source) 
    at java.io.PushbackInputStream.read(Unknown Source) 
Logging out... 
    at org.apache.commons.net.io.FromNetASCIIInputStream.read(FromNetASCIIInputStream.java:161) 
    at org.apache.commons.net.io.FromNetASCIIInputStream.read(FromNetASCIIInputStream.java:139) 
    at org.apache.commons.net.io.Util.copyStream(Util.java:101) 
    ... 4 more 
Caused by: java.io.EOFException: SSL peer shut down incorrectly 
    at com.sun.net.ssl.internal.ssl.InputRecord.read(Unknown Source) 
    ... 15 more 
QUIT 

注意,我可以使用FileZilla的父目录手动复制到本地计算机,所有的子目录和文件的自动复制。这里是日志从FileZilla的会话:

Status: Resolving address of xxx.xxx.xxx 
Status: Connecting to xx.xx.xxx.x:21... 
Status: Connection established, waiting for welcome message... 
Response: 220 (vsFTPd 2.0.5) 
Command: AUTH TLS 
Response: 234 Proceed with negotiation. 
Status: Initializing TLS... 
Status: Verifying certificate... 
Command: USER xxxxx 
Status: TLS/SSL connection established. 
Response: 331 Please specify the password. 
Command: PASS ************ 
Response: 230 Login successful. 
Command: OPTS UTF8 ON 
Response: 200 Always in UTF8 mode. 
Command: PBSZ 0 
Response: 200 PBSZ set to 0. 
Command: PROT P 
Response: 200 PROT now Private. 
Status: Connected 
Status: Sending keep-alive command 
Command: TYPE A 
Response: 200 Switching to ASCII mode. 
Status: Sending keep-alive command 
Command: PWD 
Response: 257 "/prd/fa/out/FA003100/SAIG/2013/TrnsMonitor" 
Status: Starting download of /prd/fa/out/FA003100/SAIG/2012/TrnsMonitorTRNINFIN.01 
Command: CWD /prd/fa/out/FA003100/SAIG/2012 
Status: Starting download of /prd/fa/out/FA003100/SAIG/2012/DirectLoan/CRDL12IN.xml 
Command: CWD /prd/fa/out/FA003100/SAIG/2012/DirectLoan 
Response: 250 Directory successfully changed. 
Command: PASV 
Response: 250 Directory successfully changed. 
Command: PASV 
Response: 227 Entering Passive Mode (xx,xx,xxx,x,197,141) 
Command: RETR TrnsMonitorTRNINFIN.01 
Response: 227 Entering Passive Mode (xx,xx,xxx,x,197,118) 
Command: RETR CRDL12IN.xml 
Response: 150 Opening BINARY mode data connection for TrnsMonitorTRNINFIN.01 (3775 bytes). 
Response: 150 Opening BINARY mode data connection for CRDL12IN.xml (145846 bytes). 
Response: 226 File send OK. 
Status: File transfer successful, transferred 3,775 bytes in 1 second 
Status: Starting download of /prd/fa/out/FA003100/SAIG/2012/DirectLoan/CRDL12IN-UDISB.xml 
Command: CWD /prd/fa/out/FA003100/SAIG/2012/DirectLoan 
Response: 250 Directory successfully changed. 
Command: TYPE A 
Response: 200 Switching to ASCII mode. 
Command: PASV 
Response: 227 Entering Passive Mode (xx,xx,xxx,x,197,53) 
Command: RETR CRDL12IN-UDISB.xml 
Response: 150 Opening BINARY mode data connection for CRDL12IN-UDISB.xml (2995 bytes). 
Response: 226 File send OK. 
Status: File transfer successful, transferred 145,846 bytes in 1 second 
Status: Starting download of /prd/fa/out/FA003100/SAIG/2012/DirectLoan/CRDL12IN-UCHG.xml 
Command: PASV 
Response: 226 File send OK. 
Status: File transfer successful, transferred 2,995 bytes in 1 second 
Status: Starting download of /prd/fa/out/FA003100/SAIG/2012/DirectLoan/CRDL12IN-U.xml 
Command: PASV 
Response: 227 Entering Passive Mode (xx,xx,xxx,x,197,123) 
Command: RETR CRDL12IN-UCHG.xml 
Response: 227 Entering Passive Mode (xx,xx,xxx,x,197,51) 
Command: RETR CRDL12IN-U.xml 
Response: 150 Opening BINARY mode data connection for CRDL12IN-UCHG.xml (7503 bytes). 
Response: 150 Opening BINARY mode data connection for CRDL12IN-U.xml (3367 bytes). 
Response: 226 File send OK. 
Status: File transfer successful, transferred 3,367 bytes in 1 second 
Status: Starting download of /prd/fa/out/FA003100/SAIG/2012/DirectLoan/CRDL12IN-GDISB.xml 
Command: PASV 
Response: 226 File send OK. 
Status: File transfer successful, transferred 7,503 bytes in 1 second 
Status: Starting download of /prd/fa/out/FA003100/SAIG/2012/DirectLoan/CRDL12IN-GCHG.xml 
Command: PASV 
Response: 227 Entering Passive Mode (xx,xx,xxx,x,197,25) 
Command: RETR CRDL12IN-GDISB.xml 
Response: 227 Entering Passive Mode (xx,xx,xxx,x,197,28) 
Command: RETR CRDL12IN-GCHG.xml 
Response: 150 Opening BINARY mode data connection for CRDL12IN-GDISB.xml (2047 bytes). 
Response: 150 Opening BINARY mode data connection for CRDL12IN-GCHG.xml (9074 bytes). 
Response: 226 File send OK. 
. 
. 
. 
Status: Disconnected from server 
+0

好了,我想我有这个程序现在的工作。我添加了一些断开连接并将步骤连接到getfiles()方法(请参阅下面的代码片段中的注释)。我不知道为什么这个“固定”的问题,但。 – Thundercleese 2012-08-01 18:16:10

回答

0

好吧,我已经找到了错误的原因,但我不知道该如何解决它。当多次调用retrieveFile()方法时会导致该错误。在我看来,该方法向FTP服务器发出PASV命令。服务器响应一个随机端口号,以便客户端检索文件。但是,服务器有时会重新使用的端口,这时,当发送RETR命令抛出一个异常。

我不知道如果我需要断开并重新连接/登录才能继续。我设置了异常处理中的小试,以重新连接,但测试抛出一个错误javax.net.ssl.SSLException:无法识别的SSL消息,明文连接。

我会继续在它的工作,但任何意见/帮助将受到欢迎。