Télécharger dossier dans un serveur FTP

Résolu
jayzman Messages postés 54 Statut Membre -  
jayzman Messages postés 54 Statut Membre -
bonjour,je voudrai savoir comment télécharger un dossier contient plusieurs fichiers dans un serveur FTP et stocker dans un disque local,
j'ai un code pour lister les fichiers dans le dossier mais pas le stocker dans un disque dur local,
comment faire?
besoin d'aide,
voici le code
import java.io.IOException;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
public class FTPListRecursiveDemo {
    static void listDirectory(FTPClient ftpClient, String parentDir,
            String currentDir, int level) throws IOException {
        String dirToList = parentDir;
        if (!currentDir.equals("")) {
            dirToList += "/" + currentDir;
        }
        FTPFile[] subFiles = ftpClient.listFiles(dirToList);
        if (subFiles != null && subFiles.length > 0) {
            for (FTPFile aFile : subFiles) {
                String currentFileName = aFile.getName();
                if (currentFileName.equals(".")
                        || currentFileName.equals("..")) {
                    // skip parent directory and directory itself
                    continue;
                }
                for (int i = 0; i < level; i++) {
                    System.out.print("\t");
                }
                if (aFile.isDirectory()) {
                    System.out.println("[" + currentFileName + "]");
                    listDirectory(ftpClient, dirToList, currentFileName, level + 1);
                } else {
                    System.out.println(currentFileName);
                }
            }
        }
    }
    public static void main(String[] args) {
        String server = "10.11.15.137";
        int port = 21;
        String user = "stgzo";
        String pass = "jayzman1";
        FTPClient ftpClient = new FTPClient();
        try {
            ftpClient.connect(server, port);
            int replyCode = ftpClient.getReplyCode();
            if (!FTPReply.isPositiveCompletion(replyCode)) {
                System.out.println("Connect failed");
                return;
            }
            boolean success = ftpClient.login(user, pass);
            if (!success) {
                System.out.println("Could not login to the server");
                return;
            }
            String dirToList = "/var/opt/ericsson/nms_umts_pms_seg/segment1/UETR/SubNetwork=ANRNC02/MeContext=ANRNC02";
            listDirectory(ftpClient, dirToList, "", 0);
        } catch (IOException ex) {
            System.out.println("Oops! Something wrong happened");
            ex.printStackTrace();
        } finally {
            // logs out and disconnects from server
            try {
                if (ftpClient.isConnected()) {
                    ftpClient.logout();
                    ftpClient.disconnect();
                }
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    }
}


Merci
jayzman

1 réponse

  1. tarek_dotzero Messages postés 834 Statut Membre 122
     
    Bonjour,

    Je ne sais pas est ce que vous avez déjà fait une recherche, mais des codes de la sorte existent déjà tel que le code sur :

    https://www.codejava.net/java-se/ftp/java-ftp-file-download-tutorial-and-example

    Vous avez déjà tous ce qu'il vous faut :
    une fois les répertoires détectés, il faut les créer non pas les afficher, et si c'est un fichier alors vous le détéchargez :
    // Extrait de votre code
    if (aFile.isDirectory()) {
       (new java.io.File(currentFileName)).mkdir();
       // Continuez le traitement récursive
       listDirectory(ftpClient, dirToList, currentFileName, level + 1);
    } else {
       // Code de téléchargement ici
    }
    
    0
    1. jayzman Messages postés 54 Statut Membre
       
      Bonjour tarek_dotzero,
      oui j'ai déjà vue votre exemple mais il télécharge juste un fichier mais je vais télécharger tous les fichiers dans un dossier,j'ai un autre programme il marche bien mais le taille des fichiers ne seront pas le même,je ne sais pas où est mon erreur,
      est ce qu'il y a un autre moyen
      merci
      voici mon code
      import java.io.File;
      import java.io.FileOutputStream;
      import java.io.IOException;
      import static java.lang.System.in;
      import static java.lang.System.out;
      import java.text.DateFormat;
      import org.apache.commons.net.ftp.FTPClient;
      import org.apache.commons.net.ftp.FTPFile;
      import org.apache.commons.net.ftp.FTPReply;
      public class FTPListRecursiveDemo {
          
          public static void main(String[] args) throws IOException {
             
      			String server = "10.11.15.137";
      			String username = "stgzo";
      			String password = "jayzman1";
      			String folder = "/var/opt/ericsson/nms_umts_pms_seg/segment1/UETR/SubNetwork=ANRNC02/MeContext=ANRNC02";
      			String destinationFolder = "C:\\cygwin\\home\\colombna\\decoder\\traces\\";
       
      			// Connect and logon to FTP Server
       
      			FTPClient ftp = new FTPClient();
      			ftp.connect( server );
      			ftp.login( username, password );
      			System.out.println("Connected to " + server + ".");
      			System.out.print(ftp.getReplyString());
       
      			// List the files in the directory
       
      			ftp.changeWorkingDirectory( folder );
      			FTPFile[] files = ftp.listFiles();
      			System.out.println( "Number of files in dir: " + files.length );
      			DateFormat df = DateFormat.getDateInstance( DateFormat.SHORT );
      			for( int i=0; i<files.length; i++ )
      			{
       
      				//Date fileDate = files[ i ].getTimestamp().getTime();
      				//if( fileDate.compareTo( start.getTime() ) >= 0 &&
      				// fileDate.compareTo( end.getTime() ) <= 0 )
      				//{
      				// Download a file from the FTP Server
       
      				System.out.print( df.format( files[ i ].getTimestamp().getTime() ) );
      				System.out.println( "\t" + files[ i ].getName() );
      				File file = new File( destinationFolder + File.separator + files[ i ].getName() );
      				FileOutputStream fos = new FileOutputStream( file );
      				ftp.retrieveFile( files[ i ].getName(), fos );
      				fos.close();
       
      				//file.setLastModified( fileDate.getTime() );
      			}
       
      			//}
       
      			// Logout from the FTP Server and disconnect
       
      			ftp.logout();
      			ftp.disconnect();
       
      		
      		
          }
      }
      

      jayzman
      0
    2. jayzman Messages postés 54 Statut Membre
       
      merci pour votre document et votre réponse,j'ai pas encore réussi mais j'y travaille,le taille des fichiers ne sont pas toujours le même,
      0