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

Entrée/Sortie Java Discussion :

Recherche de fichier entrainant le plantage du programme


Sujet :

Entrée/Sortie Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 18
    Points : 14
    Points
    14
    Par défaut Recherche de fichier entrainant le plantage du programme
    Bonjour à tous,

    J'ai actuellement un souci qui m'empeche de progresser dans mon développement, et dont je n'arrive pas à comprendre l'origine.

    Je fais de la recherche de fichier dans 2 arborescences (la 2ème n'est vérifié que si la première ne donne rien) sous UNIX.
    Il y a donc 4 cas possibles:

    Arborescence A & le lichier est un fichier:
    Aucun problème, je peux trouver le fichier et le lire.

    Arborescence A & le fichier est un dossier:
    Aucun problème pour le trouver, le code fournis bien la commande pour aller dedans.

    Arborescence B & le fichier est un dossier:
    Le dossier existe en plusieurs exemplaires, mais aucun problème pour le trouver et pour fournir la commande du dernier trouvé (c'est classé par dates du type aammjj).

    Arboresence B & le fichier est un fichier:
    PLANTAGE !!!
    En recherche manuelle, les fichiers existent en plusieurs exemplaires, dans les dossiers à dates différentes. Le code devrait fournir une commande d'ouverture du fichier.

    En reproduisant une partie des arborescences dans mon dossier personnel (~), et en y replaçant des fichiers/dossiers pour les 4 cas, avec les mêmes permissions d'accès, il n'y a pas de plantage (et la recherche est moins longue car moins d'infos).
    J'en déduis donc que le problème ne vient pas du fait que je recherche un fichier. Mais ça ne le résout pas.

    Si quelqu'un pense savoir où se situe le problème, je suis preneur.
    En sachant toutefois qu'il sera très dur de toucher à l'arborescence UNIX, voire impossible (beaucoup d'utilisateurs).

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Et quelle est l'exception ?

    a++

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 18
    Points : 14
    Points
    14
    Par défaut
    Il n'y en a pas.

    Dans les 3 cas qui marchent, au bout de 30 secondes maximum j'ai le résultat.
    Celui qui "plante" ne donne rien en plus de 3h (véridique), seulement l'interface qui perd son apparence si on ouvre une autre fenetre au dessus.



    Ps: je précise que le plantage survient même sans traitement après la recherche.

  4. #4
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Donc ce n'est pas un plantage...

    Ton algorithme doit surement se retrouver en boucle infini, et tu ne dois pas gérer l'EDT correctement (d'où le bug d'affichage sur l'interface).


    a++

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 18
    Points : 14
    Points
    14
    Par défaut
    Actuellement la méthode qui recherche dans l'arborescence est celle-ci (c'est la même que pour l'autre arborescence qui elle marche)

    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
    /**
    *Parcours de l'arborescence
    */
    public void visiteArbre(File repertoire, String nomFichier)
    {
    	//le repertoire a fouiller doit etre un repertoire
    	if(repertoire.isDirectory())
    	{
    		File[] list=repertoire.listFiles();
    		File fichierCherche=new File(nomFichier);
    		if(list!=null)
    		{
    			for(int i=0;i<list.length;i++)
    			{
    			//si le fichier est un repertoire, on le fouille
    				this.visiteArbre(list[i],nomFichier);
    				if(this.verificationNom(list[i].getPath(),nomFichier)==true)
    				{
    					this.setTrouve(true);
    					this.fichierLog=list[i];
    					this.setNbTrouves(this.getNbTrouves()+1);
    				}
    			}
    		}
    	}
    }

  6. #6
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Points : 1 937
    Points
    1 937
    Par défaut
    Juste une chose qui pourrait expliquer ton problème. Si tu as des liens symboliques dans ton répertoire qui feraient que tu boucles en repassant constamment sur la même arborescence.

    Genre le truc vicieux .. un lien symbolique sur ..

    Bulbo
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  7. #7
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 073
    Points : 7 977
    Points
    7 977
    Par défaut
    +1 bulbo. Je verrais bien ca aussi le lien symbolique qui fait faire un cycle...
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par dracorb Voir le message
    Il n'y en a pas.

    Dans les 3 cas qui marchent, au bout de 30 secondes maximum j'ai le résultat.
    Celui qui "plante" ne donne rien en plus de 3h (véridique), seulement l'interface qui perd son apparence si on ouvre une autre fenetre au dessus.
    Si t'es dans un IDE, lance le programme en debug. Au bout de 5 minute fait "pause" dessus et commence à faire du pas à pas en debug pour voir ou il boucle.

    Je ne suis pas d'accord avec les liens symboliques, si il avait un problème lié à ça, il tomberais en récursion infinie et finirait avec un stackoverflow. Ce qui n'est pas le cas.

    Je pencherais plutot pour l'algorithme de base qui ferait un truc du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Essaye A
    si pas
    Essaye B
    si pas
    Essaye A
    si pas
    Essaye B
    si pas
    Essaye A
    etc etc

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 18
    Points : 14
    Points
    14
    Par défaut
    Pas d'IDE non.

    J'ai vérifié pour voir si c'était un "faire A sinon faire B sinon faire A ...", mais non ça ne repasse pas au "essaye A".

    Je vais essayer de voir si y'a pas un lien symbolique qui traine (j'ai pas eu d'overflow mais bon).

  10. #10
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Points : 1 937
    Points
    1 937
    Par défaut
    verificationNom fait quoi au juste ? Car tu l'appelles que ce soit un répertoire ou un fichier.
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 18
    Points : 14
    Points
    14
    Par défaut
    verificationNom compare le nom de fichier donné en entrée à la dernière partie du chemin complet du fichier.

    par exemple si je cherche le fichier toto:

    /Home/Alpha/110322/tests ne correspond pas

    /Home/Alpha/110322/tests/toto correspond


    (j'ai mis n'importe quoi pour le début du chemin complet, c'est pas ça qui nous intéresse)

    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
     
    public boolean verificationNom(String fichierTeste,String fichierCherche)
    {
    	boolean correspond=false;
    	StringTokenizer str=new StringTokenizer(fichierTeste,"/");
    	int longueur=str.countTokens();
    	for(int i=0;i<longueur-1;i++)
    	{
    		str.nextToken();
    	}
    	if(str.nextToken().equals(fichierCherche))
    	{
    		this.chemin=fichierTeste;
    		System.out.println(this.getChemin());
    		correspond=true;
    	}
    	return correspond;
    }

  12. #12
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par dracorb Voir le message
    Pas d'IDE non..
    Soit en mettre un (y a pas de raison de s'en priver) soit utiliser kill -3 <pid java> pour avoir un stack dump de la jvm et voir où est ton process.

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 18
    Points : 14
    Points
    14
    Par défaut
    J'ai lancé un test hier soir avant de partir pour repérer un éventuel lien symbolique.

    heure debut: Wed Mar 23 16:23:13 MET 2011
    heure fin: Wed Mar 23 17:05:34 MET 2011
    A priori il n'y a donc pas de boucle infinie.

    Le code de ce test était celui-ci, en gros celui que j'ai dans mon programme mais avec juste un affichage de ce qu'il trouve dans l'arborescence.

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    import java.io.File;
    import java.io.FilenameFilter;
    import java.util.Date;
     
    public class LS
    {	
    	public static void listeRepertoire(File repertoire)
    	{
    		if(repertoire.isDirectory())
    		{
    			File[] list=repertoire.listFiles();
     
    			if(list!=null)
    			{
    				for(int i=0;i<list.length;i++)
    				{
    					System.out.println(list[i]);
    					//appel recursif des sous-repertoires
    					listeRepertoire(list[i]);
    				}
    			}
    			else
    			{
    				System.err.println(repertoire+" : Erreur de lecture.");
    			}
    		}
    	}
     
    	public static void main(String[] args)
    	{
    		Date heureDebut=new Date(System.currentTimeMillis());
    		File repertoire=new File("chemin_d'accès");
    		listeRepertoire(repertoire);
    		Date heureFin=new Date(System.currentTimeMillis());
    		System.out.println("heure debut: "+heureDebut);
    		System.out.println("heure fin: "+heureFin);
    	}
    }
    Pour l'IDE, il ne m'est pas possible d'en mettre un.
    J'essayerais le kill -3

  14. #14
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Quel sont les particularités de l'arborescence que tu parcours ?
    Quel est la quantité de répertoires et de fichiers ?
    S'agit-il d'un répertoire distant ?

    Essayes également de lancer le programme avec l'option -verbose:gc pour voir s'il n'y aurait pas une surcharge de ce coté là...


    a++

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 18
    Points : 14
    Points
    14
    Par défaut
    Pour l'arborescance, c'est comme ça (avec des noms différents)



    les fichiers A et B en bas se retrouvent avec les mêmes noms pour toutes les dates, idem pour les noms des dossiers qui les contiennent.
    D'où le for dans la recherche, le fichier utile étant le plus récent (et donc dans la dernière date fouillée).

    D'après UNIX ( ls -l > compte.txt | wc compte.txt ) il y a 434 dossiers dès le début de l'arborescence (j'ai pas vérifié à la main)

  16. #16
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Et que te renvoi un ls -lR ???

    a++

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 18
    Points : 14
    Points
    14
    Par défaut
    total 1788
    suivi d'une très longue liste

Discussions similaires

  1. Créer un programme de recherche de fichier automatique
    Par vladock dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 22/02/2008, 10h39
  2. Programme de recherche des fichiers
    Par lion13 dans le forum Linux
    Réponses: 2
    Dernier message: 05/03/2006, 22h28
  3. Réponses: 14
    Dernier message: 25/10/2004, 21h33
  4. batch de recherche de fichier ...
    Par Félia dans le forum Scripts/Batch
    Réponses: 5
    Dernier message: 29/07/2004, 15h54
  5. Recherche support fichier
    Par sydiop dans le forum Informix
    Réponses: 5
    Dernier message: 18/03/2004, 10h15

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