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

Du relatif bien absolu....

5 réponses
Avatar
beotien
Bonjour,

J' ai des soucis avec la methode listFiles() de la classe File.

Il me semble qu' elle devrait me renvoyer un tableau de chemins absolus si
son argument est un chemin absolu ou un tableau de chemins relatifs si son
argument est un chemin relatif.

J 'ai ecrit les qq lignes ci dessous apres avoir prelalablement cree l'
arborescence d' essai:

C:\Essai\Suite1\Suite2\Suite3_1 avec Suite3_2 comme frere.


import java.io.*;

public class Test{

public static void main (String[] args) throws IOException{
System.setProperty("user.dir" , "C:\\Essai\\Suite1"); //chemin racine
System.out.println("user.dir: "+System.getProperty("user.dir")); //verif

File c=new File("Suite2"); //chemin relatif

System.out.println("Absolute File:"+c.getAbsoluteFile());
System.out.println("IsDirectory:"+(c.getCanonicalFile()).isDirectory());

File[]arr=c.listFiles();

for (int i=0;i<arr.length;i++){
System.out.println("arr:"+arr[i]+" "+arr.length);}

}
}

La ligne AbsoluteFile permet de verifier que le chemin complet est bien
recree, mais l'avant derniere ligne
provoque un RunTime error NullPointerException.
Par contre si je reecris la ligne:

File c=new File("C: \\Essai\\Suite1\\Suite2"); //chemin absolu

cela fonctionne correctement.

J' ai redefini la methode et obtenu ce que je voulais: le tableau arr des
chemins relatifs.

Alors est ce que je marche a cote de mes pompes ou bien est ce que la
methode est buggee ?(mais ca se saurait!)

Si elle n' est pas buggee, comment obtenir un tableau de chemins relatifs?

Merci de votre aide.

PS: systeme Windows, Java version 1.3.0_02

5 réponses

Avatar
Bernard Koninckx
Bonjour,

Tu dois bien utiliser, les dans une chaîne de caractère ou même dans la
définition d'un caractère. C'est en quelque sorte un caractère
d'achappement. Tu as d'autres séquences telles que
n = nouvelle ligne
r = retour chariot
t = tabulation
' = quote

En espérant t'avoir répondu.

Je ne sais pas si la portabilité d'un système à un autre est ton principal
soucis. Si c'est le cas, ton application n'est pas portable à d'autres OS,
je pense. Il faudrait avoir l'avis de gens qui développent en Java depuis
plus longtemps que moi.

Bernard

"beotien" a écrit dans le message de news:
4016b52a$0$6970$
Bonjour,

J' ai des soucis avec la methode listFiles() de la classe File.

Il me semble qu' elle devrait me renvoyer un tableau de chemins absolus si
son argument est un chemin absolu ou un tableau de chemins relatifs si son
argument est un chemin relatif.

J 'ai ecrit les qq lignes ci dessous apres avoir prelalablement cree l'
arborescence d' essai:

C:EssaiSuite1Suite2Suite3_1 avec Suite3_2 comme frere.


import java.io.*;

public class Test{

public static void main (String[] args) throws IOException{
System.setProperty("user.dir" , "C:EssaiSuite1"); //chemin racine
System.out.println("user.dir: "+System.getProperty("user.dir"));
//verif


File c=new File("Suite2"); //chemin relatif

System.out.println("Absolute File:"+c.getAbsoluteFile());

System.out.println("IsDirectory:"+(c.getCanonicalFile()).isDirectory());


File[]arr=c.listFiles();

for (int i=0;i<arr.length;i++){
System.out.println("arr:"+arr[i]+" "+arr.length);}

}
}

La ligne AbsoluteFile permet de verifier que le chemin complet est bien
recree, mais l'avant derniere ligne
provoque un RunTime error NullPointerException.
Par contre si je reecris la ligne:

File c=new File("C: EssaiSuite1Suite2"); //chemin absolu

cela fonctionne correctement.

J' ai redefini la methode et obtenu ce que je voulais: le tableau arr des
chemins relatifs.

Alors est ce que je marche a cote de mes pompes ou bien est ce que la
methode est buggee ?(mais ca se saurait!)

Si elle n' est pas buggee, comment obtenir un tableau de chemins relatifs?

Merci de votre aide.

PS: systeme Windows, Java version 1.3.0_02






Avatar
beotien
Bonjour,

Merci pour ta reponse, mais je n' ai pas avance. En effet quoi que je
mette au debut du chemin relatif entraine une regression: refus de compile
avec : ou . ou . , incapacite de reconstituer le chemin absolu avec J'
en ai conclu que la formulation initiale des chemins etait correcte, et la
question reste entiere.

Mais ta reponse appelle une autre question de ma part: en dehors de la
formulation des chemins, ecrits pour Windows et "hardcoded" pour faire
court, y a t il autre chose qui te donne a penser que la classe Test n' est
pas portable sur un autre systeme, et si oui quoi?

Serge

PS: l' arborescence d' essai a ete cree avec Explorateur Windows, la
representation DOS que j' en ai donne dans mon mail est neutre.

"Bernard Koninckx" a écrit dans le message de
news:4016d9fd$0$310$
Bonjour,

Tu dois bien utiliser, les dans une chaîne de caractère ou même dans la
définition d'un caractère. C'est en quelque sorte un caractère
d'achappement. Tu as d'autres séquences telles que
n = nouvelle ligne
r = retour chariot
t = tabulation
' = quote

En espérant t'avoir répondu.

Je ne sais pas si la portabilité d'un système à un autre est ton principal
soucis. Si c'est le cas, ton application n'est pas portable à d'autres OS,
je pense. Il faudrait avoir l'avis de gens qui développent en Java depuis
plus longtemps que moi.

Bernard

"beotien" a écrit dans le message de news:
4016b52a$0$6970$
Bonjour,

J' ai des soucis avec la methode listFiles() de la classe File.

Il me semble qu' elle devrait me renvoyer un tableau de chemins absolus
si


son argument est un chemin absolu ou un tableau de chemins relatifs si
son


argument est un chemin relatif.

J 'ai ecrit les qq lignes ci dessous apres avoir prelalablement cree l'
arborescence d' essai:

C:EssaiSuite1Suite2Suite3_1 avec Suite3_2 comme frere.


import java.io.*;

public class Test{

public static void main (String[] args) throws IOException{
System.setProperty("user.dir" , "C:EssaiSuite1"); //chemin racine
System.out.println("user.dir: "+System.getProperty("user.dir"));
//verif


File c=new File("Suite2"); //chemin relatif

System.out.println("Absolute File:"+c.getAbsoluteFile());

System.out.println("IsDirectory:"+(c.getCanonicalFile()).isDirectory());


File[]arr=c.listFiles();

for (int i=0;i<arr.length;i++){
System.out.println("arr:"+arr[i]+" "+arr.length);}

}
}

La ligne AbsoluteFile permet de verifier que le chemin complet est bien
recree, mais l'avant derniere ligne
provoque un RunTime error NullPointerException.
Par contre si je reecris la ligne:

File c=new File("C: EssaiSuite1Suite2"); //chemin absolu

cela fonctionne correctement.

J' ai redefini la methode et obtenu ce que je voulais: le tableau arr
des


chemins relatifs.

Alors est ce que je marche a cote de mes pompes ou bien est ce que la
methode est buggee ?(mais ca se saurait!)

Si elle n' est pas buggee, comment obtenir un tableau de chemins
relatifs?



Merci de votre aide.

PS: systeme Windows, Java version 1.3.0_02










Avatar
Bernard Koninckx
Bonjour,

Le tableau de fichiers que tu sembles vouloir trouver est null.
Il est dès lors impossible d'essayer de le parcourrir avec la boucle for,
puisqu'il n'est pas initialisé.
Pour être sûr de pouvoir parcourrir ce tableau sans dommage tu devrais
inclure ta boucle for dans une instruction if

if (arr != null){
for (int i = 0; i < arr.length ; i ++){
System.out.println(...);
}
}

J'ai cherché un petit peu plus loin ...
au lieu de la ligne de code

File[]arr=c.listFiles();


essaye

File[]arr=c.getCanonicalFile().listFiles();


Normalement ça devrait fonctionner.

Bernard


"beotien" a écrit dans le message de news:
4018da9a$0$6974$
Bonjour,

Merci pour ta reponse, mais je n' ai pas avance. En effet quoi que je
mette au debut du chemin relatif entraine une regression: refus de compile
avec : ou . ou . , incapacite de reconstituer le chemin absolu avec
J'

en ai conclu que la formulation initiale des chemins etait correcte, et la
question reste entiere.

Mais ta reponse appelle une autre question de ma part: en dehors de la
formulation des chemins, ecrits pour Windows et "hardcoded" pour faire
court, y a t il autre chose qui te donne a penser que la classe Test n'
est

pas portable sur un autre systeme, et si oui quoi?

Serge

PS: l' arborescence d' essai a ete cree avec Explorateur Windows, la
representation DOS que j' en ai donne dans mon mail est neutre.

"Bernard Koninckx" a écrit dans le message de
news:4016d9fd$0$310$
Bonjour,

Tu dois bien utiliser, les dans une chaîne de caractère ou même dans
la


définition d'un caractère. C'est en quelque sorte un caractère
d'achappement. Tu as d'autres séquences telles que
n = nouvelle ligne
r = retour chariot
t = tabulation
' = quote

En espérant t'avoir répondu.

Je ne sais pas si la portabilité d'un système à un autre est ton
principal


soucis. Si c'est le cas, ton application n'est pas portable à d'autres
OS,


je pense. Il faudrait avoir l'avis de gens qui développent en Java
depuis


plus longtemps que moi.

Bernard

"beotien" a écrit dans le message de news:
4016b52a$0$6970$
Bonjour,

J' ai des soucis avec la methode listFiles() de la classe File.

Il me semble qu' elle devrait me renvoyer un tableau de chemins
absolus



si
son argument est un chemin absolu ou un tableau de chemins relatifs si
son


argument est un chemin relatif.

J 'ai ecrit les qq lignes ci dessous apres avoir prelalablement cree
l'



arborescence d' essai:

C:EssaiSuite1Suite2Suite3_1 avec Suite3_2 comme frere.


import java.io.*;

public class Test{

public static void main (String[] args) throws IOException{
System.setProperty("user.dir" , "C:EssaiSuite1"); //chemin
racine



System.out.println("user.dir: "+System.getProperty("user.dir"));
//verif


File c=new File("Suite2"); //chemin relatif

System.out.println("Absolute File:"+c.getAbsoluteFile());

System.out.println("IsDirectory:"+(c.getCanonicalFile()).isDirectory());


File[]arr=c.listFiles();

for (int i=0;i<arr.length;i++){
System.out.println("arr:"+arr[i]+" "+arr.length);}

}
}

La ligne AbsoluteFile permet de verifier que le chemin complet est
bien



recree, mais l'avant derniere ligne
provoque un RunTime error NullPointerException.
Par contre si je reecris la ligne:

File c=new File("C: EssaiSuite1Suite2"); //chemin absolu

cela fonctionne correctement.

J' ai redefini la methode et obtenu ce que je voulais: le tableau arr
des


chemins relatifs.

Alors est ce que je marche a cote de mes pompes ou bien est ce que la
methode est buggee ?(mais ca se saurait!)

Si elle n' est pas buggee, comment obtenir un tableau de chemins
relatifs?



Merci de votre aide.

PS: systeme Windows, Java version 1.3.0_02














Avatar
Bernard Koninckx
Re-Bonjour,

Et les chemins séquences d'échappement que je t'ai données sont bien
correctes ...
Si tu connais C ou C++, tu devrais les connaîtres

Bernard

"beotien" a écrit dans le message de news:
4018da9a$0$6974$
Bonjour,

Merci pour ta reponse, mais je n' ai pas avance. En effet quoi que je
mette au debut du chemin relatif entraine une regression: refus de compile
avec : ou . ou . , incapacite de reconstituer le chemin absolu avec
J'

en ai conclu que la formulation initiale des chemins etait correcte, et la
question reste entiere.

Mais ta reponse appelle une autre question de ma part: en dehors de la
formulation des chemins, ecrits pour Windows et "hardcoded" pour faire
court, y a t il autre chose qui te donne a penser que la classe Test n'
est

pas portable sur un autre systeme, et si oui quoi?

Serge

PS: l' arborescence d' essai a ete cree avec Explorateur Windows, la
representation DOS que j' en ai donne dans mon mail est neutre.

"Bernard Koninckx" a écrit dans le message de
news:4016d9fd$0$310$
Bonjour,

Tu dois bien utiliser, les dans une chaîne de caractère ou même dans
la


définition d'un caractère. C'est en quelque sorte un caractère
d'achappement. Tu as d'autres séquences telles que
n = nouvelle ligne
r = retour chariot
t = tabulation
' = quote

En espérant t'avoir répondu.

Je ne sais pas si la portabilité d'un système à un autre est ton
principal


soucis. Si c'est le cas, ton application n'est pas portable à d'autres
OS,


je pense. Il faudrait avoir l'avis de gens qui développent en Java
depuis


plus longtemps que moi.

Bernard

"beotien" a écrit dans le message de news:
4016b52a$0$6970$
Bonjour,

J' ai des soucis avec la methode listFiles() de la classe File.

Il me semble qu' elle devrait me renvoyer un tableau de chemins
absolus



si
son argument est un chemin absolu ou un tableau de chemins relatifs si
son


argument est un chemin relatif.

J 'ai ecrit les qq lignes ci dessous apres avoir prelalablement cree
l'



arborescence d' essai:

C:EssaiSuite1Suite2Suite3_1 avec Suite3_2 comme frere.


import java.io.*;

public class Test{

public static void main (String[] args) throws IOException{
System.setProperty("user.dir" , "C:EssaiSuite1"); //chemin
racine



System.out.println("user.dir: "+System.getProperty("user.dir"));
//verif


File c=new File("Suite2"); //chemin relatif

System.out.println("Absolute File:"+c.getAbsoluteFile());

System.out.println("IsDirectory:"+(c.getCanonicalFile()).isDirectory());


File[]arr=c.listFiles();

for (int i=0;i<arr.length;i++){
System.out.println("arr:"+arr[i]+" "+arr.length);}

}
}

La ligne AbsoluteFile permet de verifier que le chemin complet est
bien



recree, mais l'avant derniere ligne
provoque un RunTime error NullPointerException.
Par contre si je reecris la ligne:

File c=new File("C: EssaiSuite1Suite2"); //chemin absolu

cela fonctionne correctement.

J' ai redefini la methode et obtenu ce que je voulais: le tableau arr
des


chemins relatifs.

Alors est ce que je marche a cote de mes pompes ou bien est ce que la
methode est buggee ?(mais ca se saurait!)

Si elle n' est pas buggee, comment obtenir un tableau de chemins
relatifs?



Merci de votre aide.

PS: systeme Windows, Java version 1.3.0_02














Avatar
beotien
Salut,

Je ne retiens pas ta premiere proposition dans ce cas particulier (dans le
cas general tu as raison).Pourquoi?:
1-par construction la classe Test ne peut traiter que l' arborescence d'
essai (elle n' a aucun interet pratique
en dehors de la mise en evidence du probleme).
2-par construction le repertoire suite2 (sur lequel s' applique la
methode) de l' arborescence d' essai contient 2 fils: suite3_1et
suite3_2. Le tableau ne devrait donc pas etre null.
S' il est null, c'est que la methode n' a pas su retrouver son chemin
absolu, c' est la le bug.

Ta deuxieme proposition fonctionne, mais le resultat est un tableau de
chemins absolus ce qui n' est pas le but recherche.
Relis la doc, elle me parait non ambigue sur cette question.

Alors on peut se demander si le bug est dans la methode ou dans la doc. Une
methode qui retourne des chemins relatifs ne me parait pas denuee d'
interet. J' opte donc pour un bug dans la methode! Ceci dit, il y a un autre
bug dans la doc!

En te remerciant pour ta cooperation.



"Bernard Koninckx" a écrit dans le message de
news:4018f325$0$771$
Bonjour,

Le tableau de fichiers que tu sembles vouloir trouver est null.
Il est dès lors impossible d'essayer de le parcourrir avec la boucle for,
puisqu'il n'est pas initialisé.
Pour être sûr de pouvoir parcourrir ce tableau sans dommage tu devrais
inclure ta boucle for dans une instruction if

if (arr != null){
for (int i = 0; i < arr.length ; i ++){
System.out.println(...);
}
}

J'ai cherché un petit peu plus loin ...
au lieu de la ligne de code

File[]arr=c.listFiles();


essaye

File[]arr=c.getCanonicalFile().listFiles();


Normalement ça devrait fonctionner.

Bernard