2017-10-24 12 views
0

java를 사용하여 FTP 서버에서 "www"폴더를 다운로드하는 방법을 검색 중입니다. 나는 폴더를 압축 한 다음 FTPClient에서 "파일 검색"방법으로 파일을 다운로드하려고 시도했지만이 작업을 수행 할 방법이 없습니다. 감사합니다. 감사합니다.Java에서 FTP 폴더 다운로드 (FTPClient Apache Commons Net 3.6 API 사용)

내 백업 FTP 방법 코드 :

public void metodoBackupFtp(String host, String usr, String pass, String carpetaRemota, String destino) 
     throws InterruptedException { 
    // TODO Comprobar si seria posible comprimir el archivo antes de descargarlo 
    // *Nota al parecer no es posible con 
    // Ftp client, aun asi se deja el metodo de compresion sin probar 

    boolean connected, disconnected; 
    try { 
     FTPClient clienteFtp = new FTPClient(); 
     System.err.println("Datos de conexión\nHost:" + host + "\nUser:" + usr + "\nPass:" + pass); 
     clienteFtp.connect(host); 
     connected = clienteFtp.login(usr, pass); // TODO ya se realiza una conexión inicial correcta 
     clienteFtp.enterLocalPassiveMode(); 
     clienteFtp.setFileType(FTP.BINARY_FILE_TYPE); 
     if (connected) { 
      System.out.println("Conectado al FTP!"); 
      JOptionPane.showMessageDialog(frame, "Conectado al FTP => " + host, "Conectado al FTP!", 
        JOptionPane.INFORMATION_MESSAGE); 
      System.err.println("Descarga de carpeta Carpeta Remota: " + carpetaRemota + "Destino: " + pathDestino); 

     } else { 
      JOptionPane.showMessageDialog(frame, 
        "No se ha podido establecer una conexión (Revisa los datos de conexión)", 
        "Fallo la conexión al FTP => " + host, JOptionPane.ERROR_MESSAGE); 
     } 
     // Thread.sleep(10000); //Para comprobar que se mantiene la conexion 
     // Muestra la lista de archivos del raiz FTP en la consola 
     clienteFtp.enterLocalPassiveMode(); 

     FTPFile[] files = clienteFtp.listFiles(); 

     String[] sfiles = null; 
     if (files != null) 
     { 
      sfiles = new String[files.length]; 
      for (int i = 0; i < files.length; i++) 
      { 
       System.out.println(sfiles[i] = files[i].getName()); 

      } 
} 
     disconnected = clienteFtp.logout(); 
     if (disconnected) { 
      JOptionPane.showMessageDialog(frame, "Desconectado de " + host, "Logout", 
        JOptionPane.INFORMATION_MESSAGE); 
     } 
     clienteFtp.disconnect(); 
    } catch (SocketException e) { 
     JOptionPane.showMessageDialog(frame, "Fallo la conexión al FTP => " + host, "Error del servidor", 
       JOptionPane.ERROR_MESSAGE); 
    } catch (IOException e) { 

    } 

} 

답변

0

나는 문제를 해결하기 위해이 수업을한다. 나는 우편으로 갈 방법을 찾지 못했지만 도움이되기를 바랍니다. 스페인어 변수 이름을 사용하여 죄송합니다.

import java.io.BufferedOutputStream; 
import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.OutputStream; 
import org.apache.commons.net.ftp.FTP; 
import org.apache.commons.net.ftp.FTPClient; 
import org.apache.commons.net.ftp.FTPFile; 

/** 
* To Download folder from FTP Server using FTPClient library. 
* 
* @author Hadri 
* @version 1.0 
*/ 
public class FTPDown { 

/** 
* Download a file 
* 
* @param clienteFTP 
* 
* @param pathRemoto 
*   Path FTP 
* @param archivoLocal 
*   Path from file 
* @return true if download correctly 
* @throws IOException 
* 
*/ 

public static boolean retrieveFile(FTPClient clienteFTP, String pathRemoto, String archivoLocal) 
     throws IOException { 
    DBDataBackup info = new DBDataBackup(); 
    System.err.println("RetrieveFile"); 
    System.err.println("Path remoto:" + pathRemoto + "Path guardado: " + archivoLocal); 
    info.consoleArea.append("RetrieveFile\n"); 
    info.consoleArea.append("Path remoto:" + pathRemoto + "Path guardado: " + archivoLocal + "\n"); 

    File archivoDescarga = new File(archivoLocal); 
    File directorio = archivoDescarga.getParentFile(); 

    if (!directorio.exists()) { 
     info.consoleArea.append("Archivo: " + directorio.getName() + "\n"); 
     directorio.mkdir(); 
    } 
    try (OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(archivoDescarga))) { 
     clienteFTP.setFileType(FTP.BINARY_FILE_TYPE); 
     return clienteFTP.retrieveFile(pathRemoto, outputStream); 
    } catch (IOException ex) { 
     throw ex; 
    } 
} 

/** 
* Download folder from FTP 
* 
* @param clienteFtp 
*   FTPClient to use 
* @param directorioRemoto 
*   Folder to donwload 
* 
* 
* @param directorioLocal 
*   Path where it saves 
* @throws IOException 
*    Exception 
*/ 
public static void retrieveDir(FTPClient clienteFtp, String directorioRemoto, String directorioLocal) 
     throws IOException { 
    directorioLocal += "/www"; 
    DBDataBackup info = new DBDataBackup(); 
    System.err.println("RetrieveDir"); 
    info.consoleArea.append("RetrieveDir\n"); 
    System.err.println("Path remoto:" + directorioRemoto + "Path guardado: " + directorioLocal); 
    info.consoleArea.append("Path remoto:" + directorioRemoto + "Path guardado: " + directorioLocal + "\n"); 
    FTPFile[] ftpFiles = clienteFtp.listFiles(directorioRemoto); 
    if (ftpFiles == null || ftpFiles.length == 0) { 
     return; 
    } 
    for (FTPFile ftpFile : ftpFiles) { 
     info.consoleArea.append("Directorio: " + ftpFile.getName() + "\n"); 
     String ftpFileNombre = ftpFile.getName(); 
     if (ftpFileNombre.equals(".") || ftpFileNombre.equals("..")) { 

      continue; 
     } 
     String archivoLocal = directorioLocal + "/" + ftpFileNombre; 
     String archivoRemoto = directorioRemoto + "/" + ftpFileNombre; 
     if (ftpFile.isDirectory()) { 

      File nuevoDirectorio = new File(archivoLocal); 
      nuevoDirectorio.mkdirs(); 

      retrieveDir(clienteFtp, archivoRemoto, archivoLocal); 
     } else { 

      retrieveFile(clienteFtp, archivoRemoto, archivoLocal); 
     } 
    } 
} 
}