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 :

URL nulle via class loader


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 25
    Par défaut URL nulle via class loader
    Bonjour,

    Je me vois confrontée à un problème quasi similaire à celui ci :
    http://www.developpez.net/forums/showthread.php?t=44213
    à la différence près que le fichier que j'essaye de charger n'est pas un sous dossier de celui de la classe appelante.

    La structure de mon appli est celle ci :
    >Projet
    --->src
    ------>monPackage
    ---------* TestLoad.java
    --->files
    ------*file.txt
    --->META-INF
    ------* MANIFEST.MF

    Cela fait plusieurs heures que je cherche et m'arrache les cheveux pour arriver à charger le fichier file.txt depuis la classe TestLoad.java via getClass().getResource()

    J'ai pourtant essayé de suivre tous les conseils donnés par adiGuba sur le post dont j'ai mis le lien plus haut, mais rien n'y fait, getClass().getResource() retourne toujours null.

    Voici le contenu de mon fichier manifest :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Manifest-Version: 1.0
    Class-Path: ./
    Voici le contenu du main de ma classe TestLoad.java :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    InputStream is = getClass().getResourceAsStream("/files/file.txt");
    if (is==null) System.out.println("nuuull");
    J'ai beau essayer tous les chemins possibles et imaginables à la place de "/files/file.txt" (qui d'après le post semble être ce qu'il faut faire, à moins que j'ai mal saisi)... Rien n'y fait.

    Quelqu'un pourrait il m'aider s'il vous plait ?

    Merci par avance !

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 35
    Par défaut
    Ta main class c'est TestLoad?
    As tu essayé : "../files/file.txt" ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 25
    Par défaut
    Oui oui mon main est TestLoad ^^

    Non ce chemin ne marche pas. J'ai essayé beaucoup de choses et je ne comprends vraiment pas pourquoi ça ne fonctionne pas.

    Quelqu'un aurait une autre idée (voire une solution miracle ) ? ^^

  4. #4
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par Nemix Voir le message
    Voici le contenu de mon fichier manifest :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Manifest-Version: 1.0
    Class-Path: ./
    Le répertoire courant n'a rien à faire dans le class-path du manifest. Il y a de forte chance que cela soit simplement ignoré.

    Citation Envoyé par Nemix Voir le message
    Voici le contenu du main de ma classe TestLoad.java :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    InputStream is = getClass().getResourceAsStream("/files/file.txt");
    if (is==null) System.out.println("nuuull");
    Donc ton Jar doit comporter un dossier files contenant un fichier file.txt. Est-ce bien le cas ?
    Si tu utilises un EDI ces fichiers doivent être dans le répertoire contenant les sources...

    a++

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 25
    Par défaut
    >Donc ton Jar doit comporter un dossier files contenant un fichier file.txt.
    >Est-ce bien le cas ?

    Oui en effet ^^

    >Si tu utilises un EDI ces fichiers doivent être dans le répertoire contenant les
    >sources...

    En effet ! Donc ma hiérarchie était mauvaise. Il a suffit de déplacer les dossiers dont j'avais besoin (files par exemple) dans le dossier src et je peux désormais accéder aux fichiers via :
    ../files/file.txt

    Merci beaucoup !!

    Bonne journée

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 25
    Par défaut
    Huuum... Il y a quelque chose que je ne comprends pas...

    Lorsque je cherche à accéder depuis TestLoad.java au fichier files/file.txt par le chemin "../files/file.txt", cela fonctionne (encore merci d'ailleurs pour l'indication ^^).
    Maintenant, je souhaiterais lister les fichiers contenus dans le répertoire "files". Est il possible de faire ceci sans connaître le chemin entier menant au répertoire ? (car je ne connaîtrais pas forcément l'endroit où sera placé mon application).

    En effet, je place une nouvelle classe "ScanDirectory.java" afin de lister les fichiers de files, et je la place dans le même répertoire que TestLoad.java. Ces deux classes accèdent donc au dossier files et son contenu de la même manière.

    Cependant, ScanDirectory ne trouve pas le dossier files pour une raison qui m'échappe. Peut être est ce dû à la méthode que j'appelle pour trouver le dossier...
    Dans TestLoad.java je fais appel à getClass().getResource("../files/file.txt").
    Dans ScanDirectory.java je fais appel à File directory = new File("../files/file.txt");
    (peu importe que je mette ici le chemin d'un fichier ou noncompte tenu du code dans ScanDirectory, voir ci dessous... il faut déjà que ça passe le premier "if")

    Sachant que le corps de ScanDirectory est :
    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
     
    public void listFiles(String directoryPath) {
    	File directory = new File(directoryPath);
    	if(!directory.exists()){
    		System.out.println("Le fichier/répertoire '"+directoryPath+"' n'existe pas");
    	}else if(!directory.isDirectory()){
    		System.out.println("Le chemin '"+directoryPath+"' correspond à un fichier et non à un répertoire");
    	}else{
    		File[] subfiles = directory.listFiles();
    		String message = "Le répertoire '"+directoryPath+"' contient "+ subfiles.length+" fichier"+(subfiles.length>1?"s":"");
    		System.out.println(message);
    		for(int i=0 ; i<subfiles.length; i++){
    			System.out.println(subfiles[i].getName());
    		}
    	}
    }
    (je fais appel à la méthode listFiles dans le main)

    Si j'appelle listFiles avec directoryPath="C:/chemin_qui_amène_au_dossier_files" ... ça fonctionne.
    Mais si je mets directement "../files/" (ou "../files"), cela ne fonctionne plus, il s'arrête sur le premier if et me dit que le dossier n'existe pas. Cependant, je ne veux pas avoir à passer par la première méthode.
    Est ce possible ? Si oui, auriez vous quelques indications s'il vous plait ?


    Merci par avance !

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 25
    Par défaut
    Voilà, je viens (je crois) de résoudre mon problème. Voici l'explication pour celles et/ou ceux que ça intéresserait.

    Je ne comprends pas toujours bien pourquoi ces différences de chemins là où le code java va chercher les fichiers dont je parlais dans le code ci dessus. Le fait est qu'il faut, si je veux que mon code fonctionne, accéder au répertoire courant à partir duquel l'application a été lancée.

    Le bout de code est on ne peut plus simple :
    String curDir = System.getProperty("user.dir" ) + "/";
    Cette ligne permet d'obtenir le répertoire courant.

    Au lieu de donner le bout de chemin "../files/file.txt" à ma méthode listFiles(String path), il faut que je lui donne en entier. Ce qui correspond à :
    String curDir = System.getProperty("user.dir" ) + "/";
    listFiles(curDir+"src/files/");

    Ici, on rajoute "src/" en plus dans le chemin puisque, comme le disait adiGuba, en utilisant un IDE, on se trouve dans le répertoire contenant les sources. Le répertoire courant étant au dessus dans la hiérarchie par rapport au répertoire des sources (src), il faut "descendre au niveau du src".

    Bonne soirée

  8. #8
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Tu confonds 2 choses :

    • Le système de fichiers local, qui te permet de lire les dossiers et fichiers de ton disque dur (et autre média similaire). Il faut alors utiliser la classe File et assimilé, et des chemins dépendant du système hôte...

    • Les ressources au sens Java, c'est à dire des fichiers accessible via le classpath. Pour des raisons techniques diverses, il n'est pas possible d'explorer un répertoire du classpath comme on le ferait avec un répertoire.


    Il faudrait savoir ce que tu veux faire précisément ? Lire un fichier ? Parcourir un ensemble de fichier ? Autre chose...


    a++

Discussions similaires

  1. Cannot create JDBC driver of class '' for connect URL 'null'
    Par edenyorke dans le forum Tomcat et TomEE
    Réponses: 4
    Dernier message: 27/06/2011, 19h29
  2. Réponses: 1
    Dernier message: 17/07/2010, 18h58
  3. Cannot create JDBC driver of class '' for connect URL 'null'
    Par ensisoft dans le forum Tomcat et TomEE
    Réponses: 1
    Dernier message: 09/10/2007, 19h05
  4. Cannot create JDBC driver of class '' for connect URL 'null'
    Par Elwe31 dans le forum Tomcat et TomEE
    Réponses: 14
    Dernier message: 11/07/2007, 17h43
  5. Réponses: 7
    Dernier message: 10/09/2006, 11h58

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