IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

Stocker nom de fichier dans un tableau


Sujet :

Collection et Stream Java

  1. #1
    Membre éclairé Avatar de J0r_x
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    804
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2006
    Messages : 804
    Points : 751
    Points
    751
    Par défaut Stocker nom de fichier dans un tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public static void listeRepertoire ( File repertoire ) {    
            if ( repertoire.isDirectory ( ) ) {
                    File[] list = repertoire.listFiles();
                    if (list != null){
    	                for ( int i = 0; i < list.length; i++) {
    	                        // Appel récursif sur les sous-répertoires
    	                        listeRepertoire( list[i]);
    	                } 
                    } else {
                    	System.err.println(repertoire + " : Erreur de lecture.");
                    }
            } 
    }
    J'ai recupéré ce code dans la faq de developpez et j'essaye de l'arranger pour qu'il corresponde à ce que je recherche.
    Le bout de code recupére bien le nom des fichiers mais je ne trouve pas comment les sauvegarders dans un tableau, si quelqu'un voit comment ça m'interresse.
    Merci
    Aucune aide par MP, utilisez le forum.

  2. #2
    Membre éclairé Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Points : 683
    Points
    683
    Par défaut
    Citation Envoyé par J0r_x
    J'ai recupéré ce code dans la faq de developpez et j'essaye de l'arranger pour qu'il corresponde à ce que je recherche.
    On est pas devin !
    " Jag blev dömd för fildelning och allt jag fick var en sketen t-shirt. " (tankafritt.nu)
    PAS DE REPONSE PAR MESSAGE PRIVE ! Penser au bouton Résolu en bas de la discussion...

  3. #3
    Membre éclairé Avatar de J0r_x
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    804
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2006
    Messages : 804
    Points : 751
    Points
    751
    Par défaut
    Pas besoin d'être devin il suffisait de lire la ligne du dessous pour comprendre ce que je recherchais.......
    Aucune aide par MP, utilisez le forum.

  4. #4
    Membre éclairé Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Points : 683
    Points
    683
    Par défaut
    Tu veux faire quoi exactement ? tu veux que ta méthode te renvoie la liste des sous-répertoires d'un répertoire ? la liste des sous-fichiers d'un répertoire ? les 2 ? tu veux que le répertoire en paramètre soit renvoyé ou pas ? tu veux que les noms ? tu veux les fichiers ? tu veux leur URI/URL ?
    BREF... Y'a pleins de choses à éclaircir pour qu'on te guide sur le code (récursif en plus) adéquate !
    " Jag blev dömd för fildelning och allt jag fick var en sketen t-shirt. " (tankafritt.nu)
    PAS DE REPONSE PAR MESSAGE PRIVE ! Penser au bouton Résolu en bas de la discussion...

  5. #5
    Membre éclairé Avatar de J0r_x
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    804
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2006
    Messages : 804
    Points : 751
    Points
    751
    Par défaut
    Comme dit plus haut, je me repete, je veux stocker le nom de tous les fichiers que le code trouveras dans un tableau.

    EDIT : avec un return du tableau
    Aucune aide par MP, utilisez le forum.

  6. #6
    Membre éclairé Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Points : 683
    Points
    683
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    public static File[] listeRepertoire (File repertoire) {
      return (File[]) listeRepertoire(
        File repertoire,
        new ArrayList()
      ).toArray(new File[]{});
    }
     
    private static List listeRepertoire(File repertoire, List liste) {
      List resultat = liste;
      if ( repertoire.isDirectory() ) {
        resultat.add(repertoire);
        File[] temporaire = repertoire.listFiles();
        if ( temporaire != null) {
          for ( int i = 0; i < list.length; i++) {
            // Appel récursif sur les sous-répertoires
            resultat.addAll(listeRepertoire(temporaire[i],resultat));
          } 
        } else {
          System.err.println(repertoire + " : Erreur de lecture.");
        }
      }
      return resultat;
    }
    " Jag blev dömd för fildelning och allt jag fick var en sketen t-shirt. " (tankafritt.nu)
    PAS DE REPONSE PAR MESSAGE PRIVE ! Penser au bouton Résolu en bas de la discussion...

  7. #7
    Membre éclairé Avatar de J0r_x
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    804
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2006
    Messages : 804
    Points : 751
    Points
    751
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public static File[] listeRepertoire (File repertoire) {
      return (File[]) listeRepertoire(
        File repertoire,
        new ArrayList()
      ).toArray(new File[]{});
    }
    J'ai une erreur à file repertoire sur la ligne 3 il me dit parenthèse attendue :s
    Aucune aide par MP, utilisez le forum.

  8. #8
    Membre expert
    Avatar de moritan
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2005
    Messages
    687
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2005
    Messages : 687
    Points : 3 135
    Points
    3 135
    Par défaut
    Citation Envoyé par J0r_x
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public static File[] listeRepertoire (File repertoire) {
      return (File[]) listeRepertoire(
        File repertoire,
        new ArrayList()
      ).toArray(new File[]{});
    }
    J'ai une erreur à file repertoire sur la ligne 3 il me dit parenthèse attendue :s

    Effectivement il y a 2 bug dans le code données mais si tu ne c'est pas les voir et les corriger reprend tes cours de JAVA...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    public static File[] listeRepertoire (File repertoire) {
    		  return (File[]) listeRepertoire(
    		    repertoire,
    		    new ArrayList()
    		  ).toArray(new File[]{});
    		}
    	private static List listeRepertoire(File repertoire, List liste) {
    		  List resultat = liste;
    		  if ( repertoire.isDirectory() ) {
    		    resultat.add(repertoire);
    		    File[] temporaire = repertoire.listFiles();
    		    if ( temporaire != null) {
    		      for ( int i = 0; i < temporaire.length; i++) {
    		        // Appel récursif sur les sous-répertoires
    		        resultat.addAll(listeRepertoire(temporaire[i],resultat));
    		      } 
    		    } else {
    		      System.err.println(repertoire + " : Erreur de lecture.");
    		    }
    		  }
    		  return resultat;
    		}

  9. #9
    Membre éclairé Avatar de J0r_x
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    804
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2006
    Messages : 804
    Points : 751
    Points
    751
    Par défaut
    Ok mais lorsque je lis le tableau avec une boucle for toute simple j'obtiens ceci :
    java.lang.OutOfMemoryError.
    Ca veut dire que le tableau est trop gros pour être lu ?
    Aucune aide par MP, utilisez le forum.

  10. #10
    Membre expert
    Avatar de moritan
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2005
    Messages
    687
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2005
    Messages : 687
    Points : 3 135
    Points
    3 135
    Par défaut
    Citation Envoyé par J0r_x
    Ok mais lorsque je lis le tableau avec une boucle for toute simple j'obtiens ceci :
    java.lang.OutOfMemoryError.
    Ca veut dire que le tableau est trop gros pour être lu ?
    ça veut dire que tu à une boucle infinie quelque part...

  11. #11
    Membre éclairé Avatar de J0r_x
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    804
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2006
    Messages : 804
    Points : 751
    Points
    751
    Par défaut
    Si je fais :
    System.out.println(resultat.size());
    return resultat;
    J'obtient 4196368 avant que l'erreur ca fais beaucoup de fichier, le code marche pas très bien.

    Edit : la taille de la Liste augmente en puissance de 2 à chaque execution normal ? Ce qui l'amene à 4196368 avant de bloquer.
    Aucune aide par MP, utilisez le forum.

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 104
    Points : 140
    Points
    140
    Par défaut
    Bonjour,
    Les variables repertoire et liste réferencent la même List.
    Donc le bout de code suivant fait le travail en double :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    resultat.addAll(listeRepertoire(temporaire[i],resultat));
    A mon avis, il faut changer cette ligne en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    listeRepertoire(temporaire[i],resultat);
    ou bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    resultat.addAll(listeRepertoire(temporaire[i],new List()));
    Mais je n'ai pas testé...

  13. #13
    Membre éclairé Avatar de J0r_x
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    804
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2006
    Messages : 804
    Points : 751
    Points
    751
    Par défaut
    Bonjour,

    J'ai modifié quelque trucs et ca fonctionne mieux mais c'est pas encore ça, j'ai donc encore besoin de vos talents.
    Au lieu de passer par un tableau je suis passé par un vecteur qui rend la tache beaucoup plus facile.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
        public Vector listeRepertoire(File repertoire) {
            String Mime = "";
            //Recupération du Type Mime du fichier.
            System.out.println(repertoire.length());
            try {
                URL url = repertoire.toURL();
                URLConnection connection = url.openConnection();
                Mime = connection.getContentType();
            }
            catch (Exception x) {Mime = "Erreur";}
            if (Mime.compareTo("application/x-troff-msvideo")==0) {
                fichiers.add(repertoire.getAbsolutePath());
                System.out.println(repertoire.getAbsolutePath());
            }        
            if (repertoire.isDirectory()) {
                File[] list = repertoire.listFiles();
                if (list != null) {
                    for (int i = 0; i < list.length; i++) {
                        // Appel récursif sur les sous-répertoires;
                        listeRepertoire(list[i]);
                    }
                } 
            }
            return fichiers;
        }
    Le problème est lorsque que je scan des disques ou la taille du repertoire est elevé j'ai une erreur : java.lang.OutOfMemoryError.
    La taille du repertoire est alors de : 40605184.
    Je cherche une solution pour pallier ce problème si quelqu'un a une idée ou une autre solution
    Aucune aide par MP, utilisez le forum.

  14. #14
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 104
    Points : 140
    Points
    140
    Par défaut
    Augmenter la quantité maximale de mémoire utilisable par java est peut-être la solution.

    Exemple, passer l'option "-Xmx512m" en première option de la commande java permet de monter jusqu'à 512 Mo.

  15. #15
    Membre éclairé Avatar de J0r_x
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2006
    Messages
    804
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2006
    Messages : 804
    Points : 751
    Points
    751
    Par défaut
    Ok et ou j'ajoute cette option ?
    Aucune aide par MP, utilisez le forum.

Discussions similaires

  1. Stockage de noms de fichiers dans un tableau
    Par rattlesnake dans le forum C++
    Réponses: 14
    Dernier message: 15/08/2014, 14h27
  2. Réponses: 2
    Dernier message: 09/06/2011, 10h39
  3. Recuperer noms de fichiers dans un tableau
    Par epsilone15 dans le forum C
    Réponses: 6
    Dernier message: 31/08/2008, 17h23
  4. Réponses: 4
    Dernier message: 10/10/2003, 18h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo