【问题标题】:Download FTP folder on Java (Using FTPClient Apache Commons Net 3.6 API)在 Java 上下载 FTP 文件夹(使用 FTPClient Apache Commons Net 3.6 API)
【发布时间】:2017-10-24 12:08:55
【问题描述】:

我正在搜索如何使用 java 在 FTP 服务器上下载“www”文件夹。 我尝试压缩文件夹,然后从FTPClient 使用“检索文件”方法下载文件,但我找不到一些方法来做到这一点。 感谢您的帮助,谢谢。

我的备份 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) {

    }

}

【问题讨论】:

    标签: java download backup directory ftp-client


    【解决方案1】:

    我做这门课是为了解决这个问题。我没有找到任何压缩方法,但我希望它可以提供帮助。 抱歉,有些西班牙语变量名。

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

    【讨论】:

      猜你喜欢
      • 2013-10-18
      • 1970-01-01
      • 2018-10-04
      • 2019-05-21
      • 2014-03-26
      • 1970-01-01
      • 2015-01-24
      • 2018-09-17
      相关资源
      最近更新 更多