Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Chemin relatif et lecture de fichier.

2 réponses
Avatar
|||Cypher|||
Bonjour à tous.

Je tourne en rond depuis un moment, je me permets donc de vous soumettre mon
problème.

J'ai réalisé un "convertisseur" qui permet d'obtenir comme son nom l'indique
des équivalences entre plusieurs "référentiels".
Ce convertisseur fait appel à un fichier properties pour s'initialiser.
l'un des lignes du fichier properties donne le chemin vers le fichier texte.
file.source=C:\\eclipsev3\\workspace\\eurolist\\bin\\oco_eurolist.csv
Il va ensuite chercher ses données dans le fichier texte (CSV) qu'il charge
en mémoire.

Ce convertisseur doit pouvoir fonctionner offline, la solution retenue a
donc été de proposer le téléchargement d'une page html + applet + fichier
CSV.
J'ai donc réalisé que "file.source" devait être défini en relatif, plutôt
qu'en absolu.
Et là rien ne va plus...
Le fichier properties pourtant défini de manière relative est bien chargé
(quel que soit le mode d'execution : console ou applet).
Pour charger ce fichier j'utilise la classe PropertyLoader (trouvée sur
JavaWorld :
http://www.javaworld.com/javaworld/javaqa/2003-08/01-qa-0808-property-p2.html).
Pourtant, il me semble que je ne peux pas utiliser cette classe pour charger
des ressources autres que des "properties".

J'ai donc développé la classe suivante :

public class InMemoInstrLoader {
static Vector vct;

/*<P>load (once and for all) instruments list in memory from CSV
file.</p>*/
public static Vector load(String relPathToSource){//String PathToSource
if(vct==null) {//TODO improve to a real singleton pattern.
FileInputStream inputStream;
try {
System.out.println("relPathToSource : "+relPathToSource);

//ClassLoader cl = ClassLoader.getSystemResourceAsStream() ();
///inputStream =
(FileInputStream)cl.getResourceAsStream("oco_eurolist.csv");
//inputStream =
(FileInputStream)ClassLoader.getSystemClassLoader().getResourceAsStream("oco
_eurolist.csv");

inputStream = new FileInputStream(relPathToSource);
//"bin\\oco_eurolist.csv"
BufferedReader reader = new BufferedReader(new
InputStreamReader(inputStream));
String line;
vct = new Vector();
while ((line = reader.readLine()) != null){
[etc...]


Mais, selon le contexte d'éxecution (mode console / applet) le chemin
retourné est très différent (il va même chercher le fichier sur le "bureau"
!) et provoque une FileNotFoudIOException.

Comment faire pour que le chemin relatif du fichier CSV soit bien interprété
?

Merci de votre aide.



PS : J'ai également essayé de passer par File() et la méthode associée
getAbsolutePath(), mais sans succès.
--
Olivier
http://e-cologis.com
le site communautaire des colocataires

2 réponses

Avatar
Symon
Salut,

Utilise le class loader pour qu'il se charge de trouver ton fichier.

URI uri = Toto.class.getResource("/data/d.csv")).toURI();
File monCSV = new File(uri);

Si ton fichier est dans le répertoire data de ton application.

A+

Symon

|||Cypher||| wrote:
Bonjour à tous.

Je tourne en rond depuis un moment, je me permets donc de vous soumettre mon
problème.

J'ai réalisé un "convertisseur" qui permet d'obtenir comme son nom l'indique
des équivalences entre plusieurs "référentiels".
Ce convertisseur fait appel à un fichier properties pour s'initialiser.
l'un des lignes du fichier properties donne le chemin vers le fichier texte.
file.source=C:eclipsev3workspaceeurolistbinoco_eurolist.csv
Il va ensuite chercher ses données dans le fichier texte (CSV) qu'il charge
en mémoire.

Ce convertisseur doit pouvoir fonctionner offline, la solution retenue a
donc été de proposer le téléchargement d'une page html + applet + fichier
CSV.
J'ai donc réalisé que "file.source" devait être défini en relatif, plutôt
qu'en absolu.
Et là rien ne va plus...
Le fichier properties pourtant défini de manière relative est bien chargé
(quel que soit le mode d'execution : console ou applet).
Pour charger ce fichier j'utilise la classe PropertyLoader (trouvée sur
JavaWorld :
http://www.javaworld.com/javaworld/javaqa/2003-08/01-qa-0808-property-p2.html).
Pourtant, il me semble que je ne peux pas utiliser cette classe pour charger
des ressources autres que des "properties".

J'ai donc développé la classe suivante :

public class InMemoInstrLoader {
static Vector vct;

/*<P>load (once and for all) instruments list in memory from CSV
file.</p>*/
public static Vector load(String relPathToSource){//String PathToSource
if(vct==null) {//TODO improve to a real singleton pattern.
FileInputStream inputStream;
try {
System.out.println("relPathToSource : "+relPathToSource);

//ClassLoader cl = ClassLoader.getSystemResourceAsStream() ();
///inputStream > (FileInputStream)cl.getResourceAsStream("oco_eurolist.csv");
//inputStream > (FileInputStream)ClassLoader.getSystemClassLoader().getResourceAsStream("oco
_eurolist.csv");

inputStream = new FileInputStream(relPathToSource);
//"binoco_eurolist.csv"
BufferedReader reader = new BufferedReader(new
InputStreamReader(inputStream));
String line;
vct = new Vector();
while ((line = reader.readLine()) != null){
[etc...]


Mais, selon le contexte d'éxecution (mode console / applet) le chemin
retourné est très différent (il va même chercher le fichier sur le "bureau"
!) et provoque une FileNotFoudIOException.

Comment faire pour que le chemin relatif du fichier CSV soit bien interprété
?

Merci de votre aide.



PS : J'ai également essayé de passer par File() et la méthode associée
getAbsolutePath(), mais sans succès.
--
Olivier
http://e-cologis.com
le site communautaire des colocataires





Avatar
|||Cypher|||
Bonjour Symon,

Merci pour ton code snippet, mais cela ne marche pas . La méthode "toURI()"
notamment n'est pas reconnue.
En revanche j'ai fini par trouver. Il s'agissait donc de transformer un
chemin relatif en chemin absolu.

La solution (pour ceux que cela pourrait intéresser):
URL url = ClassLoader.getSystemResource(relativePathToSource);
String AbsolutePath = url.getFile();

Et voilà.

@+

--
http://123roommate.com/
la colocation en europe.



"Symon" a écrit dans le message de
news:cugei2$4bv$
Salut,

Utilise le class loader pour qu'il se charge de trouver ton fichier.

URI uri = Toto.class.getResource("/data/d.csv")).toURI();
File monCSV = new File(uri);

Si ton fichier est dans le répertoire data de ton application.

A+

Symon

|||Cypher||| wrote:
Bonjour à tous.

Je tourne en rond depuis un moment, je me permets donc de vous soumettre
mon


problème.

J'ai réalisé un "convertisseur" qui permet d'obtenir comme son nom
l'indique


des équivalences entre plusieurs "référentiels".
Ce convertisseur fait appel à un fichier properties pour s'initialiser.
l'un des lignes du fichier properties donne le chemin vers le fichier
texte.


file.source=C:eclipsev3workspaceeurolistbinoco_eurolist.csv
Il va ensuite chercher ses données dans le fichier texte (CSV) qu'il
charge


en mémoire.

Ce convertisseur doit pouvoir fonctionner offline, la solution retenue a
donc été de proposer le téléchargement d'une page html + applet +
fichier


CSV.
J'ai donc réalisé que "file.source" devait être défini en relatif,
plutôt


qu'en absolu.
Et là rien ne va plus...
Le fichier properties pourtant défini de manière relative est bien
chargé


(quel que soit le mode d'execution : console ou applet).
Pour charger ce fichier j'utilise la classe PropertyLoader (trouvée sur
JavaWorld :

http://www.javaworld.com/javaworld/javaqa/2003-08/01-qa-0808-property-p2.html).


Pourtant, il me semble que je ne peux pas utiliser cette classe pour
charger


des ressources autres que des "properties".

J'ai donc développé la classe suivante :

public class InMemoInstrLoader {
static Vector vct;

/*<P>load (once and for all) instruments list in memory from CSV
file.</p>*/
public static Vector load(String relPathToSource){//String PathToSource
if(vct==null) {//TODO improve to a real singleton pattern.
FileInputStream inputStream;
try {
System.out.println("relPathToSource : "+relPathToSource);

//ClassLoader cl = ClassLoader.getSystemResourceAsStream() ();
///inputStream > > (FileInputStream)cl.getResourceAsStream("oco_eurolist.csv");
//inputStream > >
(FileInputStream)ClassLoader.getSystemClassLoader().getResourceAsStream("oco


_eurolist.csv");

inputStream = new FileInputStream(relPathToSource);
//"binoco_eurolist.csv"
BufferedReader reader = new BufferedReader(new
InputStreamReader(inputStream));
String line;
vct = new Vector();
while ((line = reader.readLine()) != null){
[etc...]


Mais, selon le contexte d'éxecution (mode console / applet) le chemin
retourné est très différent (il va même chercher le fichier sur le
"bureau"


!) et provoque une FileNotFoudIOException.

Comment faire pour que le chemin relatif du fichier CSV soit bien
interprété


?

Merci de votre aide.



PS : J'ai également essayé de passer par File() et la méthode associée
getAbsolutePath(), mais sans succès.
--
Olivier
http://e-cologis.com
le site communautaire des colocataires