2016-04-14 45 views
0
Ben indirmek için FtpClient benim kodu kullanarak sunucudan bir zip dosyasını indirmek için çalışıyordu

indirirken değilJava FTP istemcisi dosyayı

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(); 

ama şimdi bu "-rwxrwx gibi bir şey görmek indirme konumu giderseniz --- 1 ftp ftp 513235293 Nis 11 06 ", ancak dosya indirilemedi. Bu kod, birkaç gün önce dosya çalışıyordu.

+0

RetrieveFile() 'çağrısından sonra, son FTP yanıtının yanıt kodunu kontrol etmek için' getReplyCode() 'işlevini çağırmak isteyebilirsiniz. Daha fazla bilgi verecektir. –

+0

Cevap kodu 226 "Veri bağlantısını etkileyen önceki istemci komutunu başarıyla işledikten sonra veri bağlantısını kapatmadan önce sunucu tarafından bir 226 yanıt kodu gönderilir. Çoğu durumda, bir dosya aktarımının tamamlandığını bildirir." – user3649361

+0

Can çıktı (sys out) ifadelerini de ekler misiniz? Yazmayı nerede görmek için sadece downloadFile' nesnesini de kullanırdım. –

cevap

0

ben Unix dosya temsil eden bir File nesneye atıfta dfile varsayalım sorun

// 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); 

aşağıdaki ilişkili olabileceğine inanıyoruz. Yani downloadPath + "/" + dfile'un birleşiminden beklediğiniz şey geri dönmez.

downloadPath.getName() + "/" + dfile.getName()'u kullanmalısınız. Ancak dfile.getName()'dan olası bir yol adını çıkarmanız gerekiyor. Tercih edilen yol, bunun yerine java.nio.file.Path nesnesini kullanmaktır.