Télécharger dossier dans un serveur FTP

Résolu/Fermé
jayzman Messages postés 47 Date d'inscription mercredi 18 novembre 2015 Statut Membre Dernière intervention 5 février 2016 - 14 janv. 2016 à 09:56
jayzman Messages postés 47 Date d'inscription mercredi 18 novembre 2015 Statut Membre Dernière intervention 5 février 2016 - 18 janv. 2016 à 14:10
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
A voir également:

1 réponse

tarek_dotzero Messages postés 817 Date d'inscription jeudi 19 juillet 2007 Statut Membre Dernière intervention 12 avril 2022 120
Modifié par tarek_dotzero le 14/01/2016 à 21:29
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
jayzman Messages postés 47 Date d'inscription mercredi 18 novembre 2015 Statut Membre Dernière intervention 5 février 2016
15 janv. 2016 à 06:17
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
tarek_dotzero Messages postés 817 Date d'inscription jeudi 19 juillet 2007 Statut Membre Dernière intervention 12 avril 2022 120
15 janv. 2016 à 23:34
Aucune idée, et malheureusement je ne peux pas tout tester actuellement (je suis un peu pris) mais je ne vois pas de problème dans la doc officielle, essayez de récupérer le booléen qui résulte de l'opération et de l'afficher :

https://commons.apache.org/proper/commons-net/apidocs/org/apache/commons/net/ftp/FTPClient.html#retrieveFile%28java.lang.String,%20java.io.OutputStream%29
0
jayzman Messages postés 47 Date d'inscription mercredi 18 novembre 2015 Statut Membre Dernière intervention 5 février 2016
18 janv. 2016 à 14:10
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