objet File à partir d'une URL
Bonjour,
En bref - la question est : comment transformer une URL en objet File ?
Le problème complet :
J'ai eu beau chercher, je n'ai pas trouvé sur ce site ni ailleurs. Je cherche à utiliser FOP pour créer des PDF hors FOP demande des objets "File" (fichiers de config) pour fonctionner.
Ces paramètres sont fournis à mon programme via le parsing d'un fichier xml qui donne l'url des fichiers en question. Il me faut donc transformer ces url en objets "File" pour faire fonctionner FOP.
J'ai essayé de transformer l'URL en URI et de créer un fichier à partir de cette URI mais, l'URI créée (affichée via "toString()") concatenne l'emplacement dans lequel se trouve mon programme "/home/.../lib/" et mon adresse url au lieu de pointer directement sur le fichier voulu...
voilà le code en question :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
URL myUrl = null;
URI myUri = null;
File myFile = null;
try {
myUrl = ClassLoader.getSystemResource(get_url_path());
if (myUrl != null){
myUri = new URI(myUrl.toString());
myFile = new File(myUri);
System.out.println("cas 1 - " + myFile.toURI().toString());
}
else {
myFile = new File(getDtd()) ;
System.out.println("cas 2 - " + myFile.toURI().toString());
}
} catch (URISyntaxException e) {
System.out.println("URI syntax error using path : "+ getDtd());
} |
Note :ce code est sensé gérer la création d'un objet File à partir d'un objet distant (cas 1 - par "http") ou un fichier local (cas 2)
Merci par avance pour toute aide !!! :D
David
résolu - inputstream bien géré par FOP
Finalement, ta remarque m'a permis de bien décaller mon problème.
En effet, FOP (en fait, il s'agit d'Avalon -> apache = pour fichier de config) gère bien des input de type inputstream donc à partir d'objets URL, en faisant un "openstream", ça marche très bien.
dans mon cas :
Code:
1 2 3 4 5 6 7 8 9 10 11
|
File myFile = null;
InputStream myInputStream = null;
if(!(myFile = new File(getConfigFileName())).exists()){
URL myFopConfigUrl = new URL(getConfigFileName());
myInputStream = myFopConfigUrl.openStream();
} else {
myInputStream = new FileInputStream(getConfigFileName());
}
setTheCfgBuilder(new DefaultConfigurationBuilder());
setTheCfg(getTheCfgBuilder().build(myInputStream)); |
si la string représente un fichier local, je l'associe à mon flux d'entrée pour FOP sinon je l'associe en tant qu'URL (sachant que préliminairement à l'exécution du programme, un test vérifie l'existence des fichiers et que l'adresse qui pointe dessus soit une URL, soit un "chemin local").
:yaisse2: Merci !