Pb de tableau de type File

Pb de tableau de type File - Java - Programmation

Marsh Posté le 05-11-2002 à 16:33:44    

J'essaie a partir d'un fichier zip que je dezippe de constituer un tableau de type File et ca ne marche pas .
 
    ZipEntry entry ;
    int ind=0;
    while( ( entry = zis.getNextEntry() ) != null ) {
         files[ind]=new File(entry.getName());
         ind++;
    }
Qq'un a-t-il une idée ?


---------------
Evite les personnes arrogantes et vulgaires, elles sont un tourment pour l'esprit.
Reply

Marsh Posté le 05-11-2002 à 16:33:44   

Reply

Marsh Posté le 05-11-2002 à 16:44:14    

toi t'as VRAIMENT du mal avec les tableaux.  
 
aucune réponse valable tant que :
 
- Tu ne montres pas le code complet (comment est déclaré files)
- Tu expliques ce qui cloche. "Ca ne marche" ne donne aucune info


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 05-11-2002 à 16:48:23    

DarkLord a écrit a écrit :

toi t'as VRAIMENT du mal avec les tableaux.  
 
aucune réponse valable tant que :
 
- Tu ne montres pas le code complet (comment est déclaré files)
- Tu expliques ce qui cloche. "Ca ne marche" ne donne aucune info




T'as l'impression que j'pédale dans l'yaourt mais j'avance jour après jour ...
Donc déclaration : File[] files=null;
Le probleme c'est que j'arrive pas a avoir de traces ...
La seule chose que je sais c'est que mon traitement ne va pas au bout .
P.S : C'est une servlet et j'ai regarder dans les log de Tomcat
J'ai rien vu. Où est-ce-que je pourrais regarder sinon ?


---------------
Evite les personnes arrogantes et vulgaires, elles sont un tourment pour l'esprit.
Reply

Marsh Posté le 05-11-2002 à 16:51:23    

persepolis a écrit a écrit :

 
T'as l'impression que j'pédale dans l'yaourt mais j'avance jour après jour ...
Donc déclaration : File[] files=null;




 
ah bin c'est clair t'es venu avec un problème similaire la semaine passée et c'était exactement la même erreur !!! Si tu mets ton tableau à null il n'y a aucune référence hein :o
 
Donc laisse moi rire. T'es quand meme très fort de venir à deux semaines d'intervalles avec exactement le meme genre de problème et exactement la meme cause


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 05-11-2002 à 16:52:37    

persepolis a écrit a écrit :

 
T'as l'impression que j'pédale dans l'yaourt mais j'avance jour après jour ...
Donc déclaration : File[] files=null;




 
Et si tu initialisais ton tableau ????  
 :sarcastic:


---------------

Reply

Marsh Posté le 05-11-2002 à 16:53:07    

Arf !!
Grillaid !!!!  
:D


---------------

Reply

Marsh Posté le 05-11-2002 à 16:54:07    

Bon un tableau est qqch de statique. Tu dois connaitre la taille de ton tableau avant de le créer. Donc toi tu ne la connais pas et tu le mets à null pensant que c'est bon ...
 
Bon déjà y a un prob de comprhénsion à ce niveau. Si un objet référence null, il n'y a aucune instance associée avec cet objet (et donc tenter d'accéder à une des "cases" du tableau va te jeter puisqu'il n'y a PAS de tableau).
 
Lorsque tu ne connais pas la taille à l'avance, utilise un arraylist
 

Code :
  1. ArrayList res = new ArrayList();
  2. while((entry = zis.getNextEntry()) != null ) {
  3.      res.add(new File(entry.getName());
  4. }
  5. File[] files = (File[]) res.toArray(new File[res.size()]);


 
je n'ai pas dit que le reste de ton code est correct hein. Ca c'est une autre histoire :o


Message édité par darklord le 05-11-2002 à 17:12:22

---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 05-11-2002 à 16:58:57    

DarkLord a écrit a écrit :

Lorsque tu ne connais pas la taille à l'avance, utilise un arraylist



Tiens moi j'utilise plutot un Vector. C'est mieux ArrayList ? C'est quoi les differences ?


---------------
Au royaume des sourds, les borgnes sont sourds.
Reply

Marsh Posté le 05-11-2002 à 17:01:34    

R3g a écrit a écrit :

 
Tiens moi j'utilise plutot un Vector. C'est mieux ArrayList ? C'est quoi les differences ?




 
un vector est synchronisé et est bcp plus lent qu'une arraylist. Si tu dois mettre des éléments de meme type et que tu ne connais pas la taille, l'arraylist est le meilleur choix (pour autant qu'il n'y ait pas de problème de concurence et ici c'est clairemnt pas le cas).
 
A+


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 05-11-2002 à 17:05:00    

Ok merci  ;)


---------------
Au royaume des sourds, les borgnes sont sourds.
Reply

Marsh Posté le 05-11-2002 à 17:05:00   

Reply

Marsh Posté le 05-11-2002 à 17:07:03    

R3g a écrit a écrit :

Ok merci  ;)  




 
you're welcome ;)


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 05-11-2002 à 17:10:52    

DarkLord a écrit a écrit :

 
ArrayList res = new ArrayList();
while((entry = zis.getNextEntry()) != null ) {  
     res.add(new File(entry.getName());  
}
File[] files = res.toArray(new File[res.size()]);
 




Merci,
J'avoue que j'ai plus qu'à mettre 10 balles dans le bourrin...
 
par contre à la compil, j'ai cette erreur que je ne m'explique point ?
 
UploadServlet.java [97:1] incompatible types
found   : java.lang.Object[]
required: java.io.File[]
   File[] files = res.toArray(new File[res.size()]);
 
What happened?


---------------
Evite les personnes arrogantes et vulgaires, elles sont un tourment pour l'esprit.
Reply

Marsh Posté le 05-11-2002 à 17:12:07    

ah oui c'est ma faute. J'ai oublié un truc. Desolaid je corrige. C'est parce que toArray renvoit un tableau d'objets et il faut le caster. Deux secondes j'édite


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 05-11-2002 à 23:50:19    

DarkLord a écrit a écrit :

 
 
un vector est synchronisé et est bcp plus lent qu'une arraylist. Si tu dois mettre des éléments de meme type et que tu ne connais pas la taille, l'arraylist est le meilleur choix (pour autant qu'il n'y ait pas de problème de concurence et ici c'est clairemnt pas le cas).
 
A+




 
bouhou....vous pouvez pas connaître le désarroi du mec qui code des applets en Java < 1.5, quand ArrayList n'existait pas! :D
 
Sinon, si je poste avant que Dark n'édite :  
 
File[] files = (File[]) res.toArray(new File[res.size()]);

Reply

Marsh Posté le 05-11-2002 à 23:51:20    

gfive a écrit a écrit :

 
 
bouhou....vous pouvez pas connaître le désarroi du mec qui code des applets en Java < 1.5, quand ArrayList n'existait pas! :D
 
Sinon, si je poste avant que Dark n'édite :  
 
File[] files = (File[]) res.toArray(new File[res.size()]);  




 
euh .. il a edité son premier post il y a bien longtemps  :lol:

Reply

Marsh Posté le 06-11-2002 à 08:35:38    

Merci everybody


---------------
Evite les personnes arrogantes et vulgaires, elles sont un tourment pour l'esprit.
Reply

Marsh Posté le 06-11-2002 à 11:05:42    

Citation :


Sinon, si je poste avant que Dark n'édite :  
File[] files = (File[]) res.toArray(new File[res.size()]);  


 
Mouais ca ne marche pas ton cast. :??: alors avant d écrire du code qui marche pas fodrait vérifier hein :lol:

Reply

Marsh Posté le 06-11-2002 à 11:07:27    

Prince2Lu a écrit a écrit :

 
Mouais ca ne marche pas ton cast. :??: alors avant d écrire du code qui marche pas fodrait vérifier hein :lol:




bien sur que ca marche.  
avant de critiquer les autres, vérifie que c'est pas toi qui merde !

Reply

Marsh Posté le 06-11-2002 à 11:15:04    

Prince2Lu a écrit a écrit :

Citation :


Sinon, si je poste avant que Dark n'édite :  
File[] files = (File[]) res.toArray(new File[res.size()]);  


 
Mouais ca ne marche pas ton cast. :??: alors avant d écrire du code qui marche pas fodrait vérifier hein :lol:




 
 :heink:  :heink:  :heink:


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 06-11-2002 à 12:04:43    

Prince2Lu a écrit a écrit :

Citation :


Sinon, si je poste avant que Dark n'édite :  
File[] files = (File[]) res.toArray(new File[res.size()]);  


 
Mouais ca ne marche pas ton cast. :??: alors avant d écrire du code qui marche pas fodrait vérifier hein :lol:




Pourquoi ça ne marcherait pas ? Qu'est-ce qui cloche à ton avis dans ce cast ? :heink:  
(il y a pas d'âge pour apprendre des trucs... ;) )

Reply

Marsh Posté le 06-11-2002 à 14:44:48    

Voici mon code :
LinkedList listTemp = new LinkedList();
Parameter tab [] = (Parameter [])listTemp.toArray();
 
Voici l'exception :
type Exception report
message Internal Server Error
description The server encountered an internal error (Internal Server Error) that prevented it from fulfilling this request.
exception  
java.lang.ClassCastException: java.lang.Object
 
Donc si kk1 peut m expliquer pourquoi ca marche pas , je suis preneur:D  
 
pour l'instant je fais ce truc qui marche par contre :
Object objTab [] = listTemp.toArray();
Parameter prmTab [] = new Parameter [objTab.length];
for (int i=0 ; i < objTab.length ; i++)
prmTab[i]=(Parameter)objTab[i];
mais bon c pas le top...
 
 
 

Reply

Marsh Posté le 06-11-2002 à 14:54:25    

'tain, mais tlis les réponses, bordel!!!
 
On te dit :  
 
 
Parameter tab [] = (Parameter [])listTemp.toArray(new Parameter[listTemp.size()] );  
 
alors bon...


Message édité par gfive le 06-11-2002 à 14:54:45
Reply

Marsh Posté le 06-11-2002 à 14:54:55    

j'adore les gens qui critiquent et qui ne savent meme pas lire ...


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 06-11-2002 à 14:57:58    

Citation :

File[] files = (File[]) res.toArray(new File[res.size()]);


 

Prince2Lu a écrit a écrit :

Voici mon code :
LinkedList listTemp = new LinkedList();
Parameter tab [] = (Parameter [])listTemp.toArray();




 [:benou]  
 

Prince2Lu a écrit a écrit :

alors avant d écrire du code qui marche pas fodrait vérifier hein



 :fou:  
 :gun:  
 

Reply

Marsh Posté le 06-11-2002 à 15:10:35    

c'est la triplette magique du reply haineux, Gfive/Darklord/Benou!! :D:D

Reply

Marsh Posté le 06-11-2002 à 15:11:45    

:jap:


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 06-11-2002 à 15:15:01    

Citation :


'tain, mais tlis les réponses, bordel!!!  
On te dit :  
Parameter tab [] = (Parameter [])listTemp.toArray(new Parameter[listTemp.size()] );  
alors bon...


Désolé Pardon Mille excuses Mea Culpa Excuse me Sorry  :D  
 :jap:  :jap:  :jap:  :jap:  :jap:  :jap:  :jap:  
:bounce:
Et pour ma culture personnelle, pourquoi avec toArray() ca marche pas et que ca marche avec toArray(Object []) ???  :??:  
 

Reply

Marsh Posté le 06-11-2002 à 15:46:41    

BifaceMcLeOD a écrit a écrit :

Je réponds...




 
 :??:


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 06-11-2002 à 15:51:30    

Si tu lis le Javadoc de ces 2 fonctions, tu verras que toArray(Object[]) prend le tableau en argument et le remplit avec les éléments de la liste (par sécurité, si le tableau est trop petit, cette méthode en réalloue un nouveau). Alors que toArray() sans argument alloue un nouveau tableau et le remplit avec les éléments de la liste.
 
Pourquoi ça marche : parce que si c'est la méthode toArray() qui alloue le tableau, celui-ci aura comme type à l'exécution Object[]. Forcément, puisque la méthode ne peut pas utiliser un type plus spécialisé qu'Object comme type des éléments du tableau. Par conséquent, si tu essaies de caster en File[] un tableau alloué en tant que Object[], tu te prends une ClassCastException.
 
Alors que si tu alloues toi-même le tableau, et que tu le passes en argument à toArray, celui-ci aura déjà le bon type (à moins que tu sois débile :D) puisque tu auras déjà alloué un tableau de type File[]. Et quand, en retour de la fonction toArray, tu essaies de le caster en File[], il n'y a plus d'erreur, puisque c'est effectivement son type à l'exécution.
 
Capici ?  :D


Message édité par BifaceMcLeOD le 06-11-2002 à 15:52:51
Reply

Marsh Posté le 06-11-2002 à 15:57:42    

rien à redire :jap:


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 06-11-2002 à 15:58:39    

Capici  :bounce:  :pt1cable:  :p
 :spookie:  

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed