2016-04-14 16 views
0

をダウンロードしていない私はFTPClientを使用して、サーバーからzipファイルをダウンロードしようとしていたダウンロードのための私のコードはJavaのFTPクライアントは、ファイル

FTPClient ftpClient = new FTPConnection().makeConnection(loc); 

     try { 
      ftpClient.setFileType(FTP.BINARY_FILE_TYPE); 
      success = ftpClient.changeWorkingDirectory(PATH + preset + "/" + file_to_download + offset); 
      System.out.println("Download Path:-" + PATH + preset + "/" + file_to_download + offset); 
      if (!success) { 
       System.out.println("Could not changed the directory to RIBS"); 
       return; 
      } else { 
       System.out.println("Directory changed to RIBS"); 
      } 
      FTPFile[] files = ftpClient.listFiles(); 
      for (FTPFile file : files) { 
       if (file.getName().contains(".zip")) { 
        dfile = file; 
       } 

      } 
      fsize=dfile.getSize(); 
      fileMap.put("build", dfile.getName()); 
      primaryStage = (Stage) ap.getScene().getWindow(); 

      String homePath = System.getProperty("user.home"); 
      File downloadPath = new File(homePath + "\\Buildss\\" + osVer); 
      if (!downloadPath.exists()) { 
       if (downloadPath.mkdirs()) { 
        System.out.println("Directory is created!"); 
       } else { 
        System.out.println("Failed to create directory!"); 
       } 
      } 
      // System.out.println(chosenDir.getAbsolutePath()); 
      filePath = new File(downloadPath + "/" + dfile.getName()); 
      if (filePath.exists()) { 
       System.out.println("File altready exist"); 
       return; 
      } 
      else { 
       fileMap.put("path", filePath.toString()); 
       fileMap.put("kind", "RIBS"); 


       Task downloadTask = new Task<Void>() { 
        @Override 
        public Void call() throws IOException { 
         try { 
          long len = dfile.getSize(); 
          System.out.println("File From Server:::::: " + len); 
          downloadFile = new File(downloadPath + "/" + dfile); 
          outputFile = new FileOutputStream(downloadFile); 
         } catch (FileNotFoundException e) { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
         } 
         ftpClient.sendNoOp(); 
         ftpClient.setConnectTimeout(1000); 
         //ftpClient.retrieveFile(dfile, output); 
        if (ftpClient.retrieveFile(dfile.getName(), outputFile) == true) { 
          downloadButton.setDisable(true); 
          System.out.println("LOCAL FILE LENGTH:-" + downloadFile.length()); 

         } 
         return null; 
        } 
       }; 
       Thread t = new Thread(downloadTask); 
       t.start(); 

ですが、私はダウンロード場所を行けば今、私はこの「-rwxrwxような何かを参照してください--- 1 ftp ftp 513235293 Apr 11 06 "ファイルはダウンロードされていません。 このコードは働いていました。

+0

'retrieveFile()'呼び出しの後、 'getReplyCode()'を呼び出して、最後のFTP応答の返信コードをチェックすることができます。それはあなたに多くの情報を与えるでしょう。 –

+0

返信コードは226です。「データ接続に影響を与える以前のクライアントコマンドを正常に処理した後に、データ接続を閉じる前に226返信コードがサーバーから送信されます」ほとんどの場合、ファイル転送の完了を通知します。 " – user3649361

+0

Can出力(sys out)文も追加しますか?私はsysoutの 'downloadFile'オブジェクトも書いています。 –

答えて

0

は、私はUnixのファイルを表すFileオブジェクトと呼ばdfileを想定して、問題が

// File dfile 
FTPFile[] files = ftpClient.listFiles(); 
for (FTPFile file : files) { 
    if (file.getName().contains(".zip")) { 
    dfile = file; 
    } 
} 
... 
File downloadPath = new File(homePath + "\\Buildss\\" + osVer); 
... 
// File downloadFile; 
downloadFile = new File(downloadPath + "/" + dfile); 

を以下に関連していると信じています。したがって、downloadPath + "/" + dfileを連結しても、期待通りの結果が返されません。

downloadPath.getName() + "/" + dfile.getName()を使用してください。しかし、可能なパス名はdfile.getName()から削除する必要があります。代わりにjava.nio.file.Pathオブジェクトを使用することをお勧めします。

関連する問題