OVH Cloud OVH Cloud

URI, URL, File, etc

12 réponses
Avatar
Vinz
salut à tous,

J'ai besoin d'un petit coup de main parce que je m'y perds un peu dans les
dénominations entre URI, URL, File.

Je dois utiliser un objet qui prend en paramètre un File. Ce fichier que
j'utilise se trouve dans le répertoire classes/conf/monFichier.xml . Tout
ceci se retrouve ensuite dans un .war

j'ai lu quelque part que c'était mieux de passer par des URI (dont je ne
suis pas sûr d'avoir bien compris l'intérêt). voilà ce que je fais :

URI fichierConfURI=new URI("/conf/classes/monFichier.xml");
File fichierConfig= new File(fichierConfURI);

J'ai une exception qui est levée, qui me dit "URI is not absolute" .

Et quand j'essaye de passer par un URL (qui elle est absolue, car quand je
débugue, je vois qu'elle vaut c:\program files\etc), et que je passe cette
URL pour construire mon URI, j'ai la même erreur.

Si quelqu'un a un début de solution sur ce problème ça m'intéresse beaucoup,
parce que je n'ai rien trouvé sur l'erreur "URI is not absolute" sur google

merci d'avance

--
Vinz

10 réponses

1 2
Avatar
Farid
Essaye ca
en passant la string "/conf/monFichier.xml"

public File getSrcFile(String res)
{

URL url = this.getClass().getResource(res);
if (url == null)
{
throw new RuntimeException("Sorry - document not found:" + res);
}
String f = url.getFile();

return new File(f);
}

"Vinz" wrote in message
news:c82a8c$rib$
salut à tous,

J'ai besoin d'un petit coup de main parce que je m'y perds un peu dans les
dénominations entre URI, URL, File.

Je dois utiliser un objet qui prend en paramètre un File. Ce fichier que
j'utilise se trouve dans le répertoire classes/conf/monFichier.xml . Tout
ceci se retrouve ensuite dans un .war

j'ai lu quelque part que c'était mieux de passer par des URI (dont je ne
suis pas sûr d'avoir bien compris l'intérêt). voilà ce que je fais :

URI fichierConfURI=new URI("/conf/classes/monFichier.xml");
File fichierConfig= new File(fichierConfURI);

J'ai une exception qui est levée, qui me dit "URI is not absolute" .

Et quand j'essaye de passer par un URL (qui elle est absolue, car quand je
débugue, je vois qu'elle vaut c:program filesetc), et que je passe cette
URL pour construire mon URI, j'ai la même erreur.

Si quelqu'un a un début de solution sur ce problème ça m'intéresse
beaucoup,

parce que je n'ai rien trouvé sur l'erreur "URI is not absolute" sur
google


merci d'avance

--
Vinz




Avatar
Jean Bernard Root
Vinz wrote:

salut à tous,

J'ai besoin d'un petit coup de main parce que je m'y perds un peu dans les
dénominations entre URI, URL, File.



RFC 1738 (URL)
RFC 2396 (URI)

Je dois utiliser un objet qui prend en paramètre un File. Ce fichier que
j'utilise se trouve dans le répertoire classes/conf/monFichier.xml . Tout
ceci se retrouve ensuite dans un .war

j'ai lu quelque part que c'était mieux de passer par des URI (dont je ne
suis pas sûr d'avoir bien compris l'intérêt). voilà ce que je fais :

URI fichierConfURI=new URI("/conf/classes/monFichier.xml");
File fichierConfig= new File(fichierConfURI);



Oula. Si votre fichier est dans le classpath, la bonne méthode est
d'appeler votre ClassLoader et de lui demander un inputstream sur la
ressource (et donc plus besoin de fichiers et tout le bazar) :

getClassLoader().getResourceAsStream("/conf/classes/monfichier.xml");

je pense que c'est ce genre de conseil que vous "avez lu quelque part".
Cette API permet d'avoiles un flux sur une resource dont le chemin est
spécifié de façon absolue et qui doit se trouver dans le class path de
votre ClassLoader.

J'ai une exception qui est levée, qui me dit "URI is not absolute" .


Bah oui. C'est exactement le cas. Elle n'est pas absolue.


Et quand j'essaye de passer par un URL (qui elle est absolue, car quand je
débugue, je vois qu'elle vaut c:program filesetc), et que je passe cette
URL pour construire mon URI, j'ai la même erreur.



Pourriez-vous expliciter ce que vous cherchez à faire ? Passer par un
URL pour construire un URI et ensuite un fichier ? Révisez vos javadocs
sur les java.io.File ...


Si quelqu'un a un début de solution sur ce problème ça m'intéresse beaucoup,
parce que je n'ai rien trouvé sur l'erreur "URI is not absolute" sur google


Je pense que vous vous trompez de direction ...

Avatar
Vinz
c'est ce que j'ai essayé de faire en attendant :

String fichierConf="/conf/monFichier.xml";
URL URLfichierConf =getClass().getResource(fichierConf);

File FilefichierConf=new File(URLfichierConf.getFile());

if(!FilefichierConf.exists())

logger.error("fichier de conf des organismes introuvable");

et effectivement, le fichier n'existe pas, alors que quand je regarde avec
le debugger ce qu'il y a dans URLfichierConf, il me trouve bien le fichier
(/c:/Program%20Files/eclipse/workspace/projet/WEB-INF/classes/conf/monFichie
r.xml").

et pourtant, quand je crée un fichier à partir de ça, le fichier n'existe
pas. C'est quand même pas à cause de l'espace entre "program files", ou du
sens du séparateur de répertoire ??






"Farid" a écrit dans le message de
news:40a4c24f$0$31383$
Essaye ca
en passant la string "/conf/monFichier.xml"

public File getSrcFile(String res)
{

URL url = this.getClass().getResource(res);
if (url == null)
{
throw new RuntimeException("Sorry - document not found:" + res);
}
String f = url.getFile();

return new File(f);
}

"Vinz" wrote in message
news:c82a8c$rib$
salut à tous,

J'ai besoin d'un petit coup de main parce que je m'y perds un peu dans
les


dénominations entre URI, URL, File.

Je dois utiliser un objet qui prend en paramètre un File. Ce fichier que
j'utilise se trouve dans le répertoire classes/conf/monFichier.xml .
Tout


ceci se retrouve ensuite dans un .war

j'ai lu quelque part que c'était mieux de passer par des URI (dont je ne
suis pas sûr d'avoir bien compris l'intérêt). voilà ce que je fais :

URI fichierConfURI=new URI("/conf/classes/monFichier.xml");
File fichierConfig= new File(fichierConfURI);

J'ai une exception qui est levée, qui me dit "URI is not absolute" .

Et quand j'essaye de passer par un URL (qui elle est absolue, car quand
je


débugue, je vois qu'elle vaut c:program filesetc), et que je passe
cette


URL pour construire mon URI, j'ai la même erreur.

Si quelqu'un a un début de solution sur ce problème ça m'intéresse
beaucoup,

parce que je n'ai rien trouvé sur l'erreur "URI is not absolute" sur
google


merci d'avance

--
Vinz








Avatar
Jean Bernard Root
Vinz wrote:

c'est ce que j'ai essayé de faire en attendant :

String fichierConf="/conf/monFichier.xml";
URL URLfichierConf =getClass().getResource(fichierConf);



Pourquoi vouloir absoluement passer par un URL ?

Si vous cherchez à vérifier l'existence de votre fichier, il suffit de
laisser getClass().getResourceAsStream() envoyer une exception.

InputStream is = null;
try {
is = getClass().getResourceAsStream("/conf/monFichier.xml");
} catch (Exception e) {
logger.error ("fichier de conf des organismes introuvable", e);
}

/* là vous pouvez lire le contenu du fichier qui sera dans le stream */

Avatar
Vinz
Le problème, c'est que l'objet que j'utilise prend un File en paramètre.
Donc à moins de convertir un InputStream en File (ce qui ne doit pas être
trop faisable), ça va me poser problème...


"Jean Bernard Root" a écrit dans le message de
news:40a4d0c3$0$13000$
Vinz wrote:

c'est ce que j'ai essayé de faire en attendant :

String fichierConf="/conf/monFichier.xml";
URL URLfichierConf =getClass().getResource(fichierConf);



Pourquoi vouloir absoluement passer par un URL ?

Si vous cherchez à vérifier l'existence de votre fichier, il suffit de
laisser getClass().getResourceAsStream() envoyer une exception.

InputStream is = null;
try {
is = getClass().getResourceAsStream("/conf/monFichier.xml");
} catch (Exception e) {
logger.error ("fichier de conf des organismes introuvable", e);
}

/* là vous pouvez lire le contenu du fichier qui sera dans le stream */





Avatar
Vinz
J'ai quand même essayé ce que tu préconises, et j'ai un problème : is ne
comprend que des "0", et aucune erreur n'est levée (et mon fichier n'est pas
vide).

"Jean Bernard Root" a écrit dans le message de
news:40a4d0c3$0$13000$
Vinz wrote:

c'est ce que j'ai essayé de faire en attendant :

String fichierConf="/conf/monFichier.xml";
URL URLfichierConf =getClass().getResource(fichierConf);



Pourquoi vouloir absoluement passer par un URL ?

Si vous cherchez à vérifier l'existence de votre fichier, il suffit de
laisser getClass().getResourceAsStream() envoyer une exception.

InputStream is = null;
try {
is = getClass().getResourceAsStream("/conf/monFichier.xml");
} catch (Exception e) {
logger.error ("fichier de conf des organismes introuvable", e);
}

/* là vous pouvez lire le contenu du fichier qui sera dans le stream */





Avatar
Jean Bernard Root
Vinz wrote:

Le problème, c'est que l'objet que j'utilise prend un File en paramètre.
Donc à moins de convertir un InputStream en File (ce qui ne doit pas être
trop faisable), ça va me poser problème...


Ah ... ça veut donc dire que l'objet en question est mal conçu et mérite
un petit coup de "refactoring" comme on dit.

S'il prenait un InputStream au lieu d'un File, on pourrait l'utiliser
avec plein d'autres sources de données (des sockets, etc ...) et vous
pourriez l'utiliser sans vous arracher les cheveux.

Si votre seul problème est d'accèder à un fichier, oubliez "ce que vous
avez lu quelquepart" et utilisez des instances de File ...

File f = new File ("config/monFichier.xml");

notez bien que l'accès au fichier va classiqument dépendre de l'endroit
d'où vous lancez le programme, et qu'il vous sera bien plus profitable
de passer par des chemins absolus (et donc de la configuration pour
votre appli)

...

Avatar
Jean Bernard Root
Vinz wrote:

J'ai quand même essayé ce que tu préconises, et j'ai un problème : is ne
comprend que des "0", et aucune erreur n'est levée (et mon fichier n'est pas
vide).



Comment le lisez-vous ?

Avatar
Vinz
Comment le lisez-vous ?


par le debugger d'Eclipse

Avatar
Farid
hum. bizzare que ca ne marche pas.
c'est ce que j'utilises dans tous mes test unitaire pour charger des
fichiers utilises dans ces test.
mais c'est vrai que je n'ai pas d'espace dans le chemin, qui est un problem
CLASSIQUE avec java...

2 solutions:
la premiere passe comme dans mon code par
String f = url.getFile();
et replace tous les sequence %20 par des veritable espace.

la deuxieme solution comme te l'indique Jean Bernard,
passe par un getResourceAsStream()

Puisque de toute facon tu veut travailler avec un xml existant, normalement
les outils te permettant de faire du xml, devrait aussi donner access au
fichier xml via des inputstream.
voici un bout de code que j'utilise pour recuperer un access (en lecture)
sur un fichier contenu dans mon jar.

ClassLoader cl = MaClass.class.getClassLoader();
InputStream is = cl.getResourceAsStream("conf/monFichier.xml");

En esperant que sa aidera.

PS; entre nous, il est toujours recommende de ne pas installer des
programmes java genre IDE et server dans des repertoires avec des espace. ca
pose TOUJOURS plein de problem !

Farid.


"Vinz" wrote in message
news:c82ig4$u0$
c'est ce que j'ai essayé de faire en attendant :

String fichierConf="/conf/monFichier.xml";
URL URLfichierConf =getClass().getResource(fichierConf);

File FilefichierConf=new File(URLfichierConf.getFile());

if(!FilefichierConf.exists())

logger.error("fichier de conf des organismes introuvable");

et effectivement, le fichier n'existe pas, alors que quand je regarde avec
le debugger ce qu'il y a dans URLfichierConf, il me trouve bien le fichier

(/c:/Program%20Files/eclipse/workspace/projet/WEB-INF/classes/conf/monFichie

r.xml").

et pourtant, quand je crée un fichier à partir de ça, le fichier n'existe
pas. C'est quand même pas à cause de l'espace entre "program files", ou du
sens du séparateur de répertoire ??






"Farid" a écrit dans le message de
news:40a4c24f$0$31383$
Essaye ca
en passant la string "/conf/monFichier.xml"

public File getSrcFile(String res)
{

URL url = this.getClass().getResource(res);
if (url == null)
{
throw new RuntimeException("Sorry - document not found:" + res);
}
String f = url.getFile();

return new File(f);
}

"Vinz" wrote in message
news:c82a8c$rib$
salut à tous,

J'ai besoin d'un petit coup de main parce que je m'y perds un peu dans
les


dénominations entre URI, URL, File.

Je dois utiliser un objet qui prend en paramètre un File. Ce fichier
que



j'utilise se trouve dans le répertoire classes/conf/monFichier.xml .
Tout


ceci se retrouve ensuite dans un .war

j'ai lu quelque part que c'était mieux de passer par des URI (dont je
ne



suis pas sûr d'avoir bien compris l'intérêt). voilà ce que je fais :

URI fichierConfURI=new URI("/conf/classes/monFichier.xml");
File fichierConfig= new File(fichierConfURI);

J'ai une exception qui est levée, qui me dit "URI is not absolute" .

Et quand j'essaye de passer par un URL (qui elle est absolue, car
quand



je
débugue, je vois qu'elle vaut c:program filesetc), et que je passe
cette


URL pour construire mon URI, j'ai la même erreur.

Si quelqu'un a un début de solution sur ce problème ça m'intéresse
beaucoup,

parce que je n'ai rien trouvé sur l'erreur "URI is not absolute" sur
google


merci d'avance

--
Vinz












1 2