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

avec Java Discussion :

utilisation des DirectoryStream


Sujet :

avec Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2023
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2023
    Messages : 12
    Points : 9
    Points
    9
    Par défaut utilisation des DirectoryStream
    Bonjour,

    je souhaite faire la différence de contenu entre 2 dossiers (A et B). Pour cela je souhaite utiliser les DirectoryStream ce qui me donne 2 listes de Path (une pour chaque dossier). Mon problème viens du fait que cette liste n'est pas ordonnée (un print d'une des liste me fourni un ensemble désordonné, tant en type (fichiers/sous-dossier) que lexicographiquement ).
    Le problème qui en découle est le suivant:

    si je veux utilise ce moyen (différence de contenu) pour faire une fonction de synchronisation l'efficacité vas êtres proche de N*M (N: longueur de la différence de contenu du dossier A, M longueur de la différence de contenu du dossier B).

    et je ne suis pas certains de pouvoir parcourir plusieurs fois le même DirectoryStream.

    Mon résonnement est-il faux.
    Et comment m'y prendre, que ce raisonnement soit vrai ou faux ?

  2. #2
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 451
    Points : 881
    Points
    881
    Billets dans le blog
    5
    Par défaut
    Si à la fin tu as une liste, pourquoi ne pas l'ordonner avec un Comparator?
    https://docs.oracle.com/en/java/java...omparator.html

    Ensuite, tu peux:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Collections.sort(list,comparator);
    https://docs.oracle.com/en/java/java...llections.html

    Voir mieux, le faire dans un stream:
    https://mkyong.com/java8/java-8-how-...stream-sorted/
    Le stream permet en plus de classer par ordre désordonné.
    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
     
    @Override
    	public List<Integer> simuleJet(Integer nombreDe, boolean chanceAuxDes) throws JetDeException{
    		if(nombreDe < 0) {
    			Object[] params = {nombreDe};
    			throw new JetDeException(params, "jet.de.calcul.proba.simulation.nombre.negatif");
    		}
    		List<Integer> orderList = 
    				chanceAuxDes?scoresPossibles.stream().sorted(Comparator.reverseOrder()).toList() 
    						:scoresPossibles.stream().sorted(Comparator.naturalOrder()).toList();
    		int index = 0;
    		List<Integer> lReturn = new ArrayList<>();
    		for(int i = 0; i < nombreDe; i++) {
    			lReturn.add(orderList.get(index));
    			index++;
    			if(index == orderList.size()) {
    				index = 0;
    			}
    		}
    		return lReturn.stream().sorted(Comparator.reverseOrder()).toList();
    	}
    il est possible d'utiliser un comparator pour les stream.

    De plus, Path est comparable, donc ordonnable sans comparateur:
    https://docs.oracle.com/en/java/java...file/Path.html

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2023
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2023
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    merci pour votre réponse.

    Voici un bout de code:

    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
     
    public static void Test(String[] args) throws IOException {		
     
      Path workingDirectory; 
     
      switch (args.length) {
         case 0 -> { workingDirectory = Paths.get(System.getProperty("user.dir")); }
         case 1 -> { workingDirectory = Paths.get(args[0]); }
         default -> { return; }
      }
      try { 
           DirectoryStream<Path> directoryContent = Files.newDirectoryStream(workingDirectory);
           for (Path entry: directoryContent) {
                System.out.println(entry.getFileName());
                System.out.println(entry.getParent());
           } 
          directoryContent.close();
       }
       catch (IOException e) { System.out.println("erreur de flux"); }
    }
    Si on omet le fais que la méthode ne renvois rien et que le flux est fermé à la fin, ce code fourni un DirectoryStream<Path> (DSP) sur un dossier. En l'appelant sur un second dossier j'obtiendrai un second DirectoryStream<Path>.
    Si ces deux DirectoryStream<Path> sont triés ( et c'est la un de mes problème, d'après quel critères ou ensemble de critères). Il possible de parcourir le premier DSP et, à chaque élément du premier DSP, je cherche une égalité sur les éléments du second DSP. En cas de concordance je les retire des deux DSP. A la fin chaque flux ne contient plus que les Path propres à chaque dossier.
    Avec un iterator sur chaque le coût théorique est de N+M.
    Pour les critères de comparaison, tant pour le tri de chaque DSP que pour la comparaison de leur éléments, je n'arrive pas à voir comment m'y prendre.
    Car d'après la doc oracle:
    boolean equals(Object other) Tests this path for equality with the given object.
    mais comment ?

  4. #4
    Membre éclairé

    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 451
    Points : 881
    Points
    881
    Billets dans le blog
    5
    Par défaut
    Je ne sais pas selon quels critères sont trié un Path.

    Au pire, tu peux récupérer une liste au fur et à mesure et trier à la fin.

    Et si il y a un problème, tu peux toujours implémenter Comparable pour définir la façon dont tu compte trier.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2023
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2023
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    ok, merci je vais essayer ça.

Discussions similaires

  1. Règles d'utilisation des forums C
    Par Franck.H dans le forum C
    Réponses: 3
    Dernier message: 26/01/2008, 18h35
  2. [CR8.5] Utilisation des codes barre
    Par Robert dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 20/01/2005, 17h13
  3. utilisation des sockets sous windows
    Par Tupac dans le forum Réseau
    Réponses: 2
    Dernier message: 21/12/2002, 19h24
  4. [Crystal Report] Utilisation des vues de sql serveur
    Par Olivierakadev dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 15/11/2002, 18h44
  5. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 17h01

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