Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
991 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  scan de dossier (débutant)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

scan de dossier (débutant)

n°1200588
ash08
Posté le 15-09-2005 à 16:50:05  profilanswer
 

Yop tout le monde,
je voudrais faire un petit soft qui scan recursivement des dossiers.
Dans un 1er temps je me suis dit que je vais le faire en C ca ira vite vu que je lutte trop en POO  :heink:  
Pi finalement je me suis dit qu'il faut bien commencer 1 jour !!
 
Donc j'aimerai le faire en java, j'ai consulté le sujet pour noob et quelques pages du livre "penser en java" et avant de ma lancer tete baisser dans le code j'aurai voulu un peu de soutient sur la conceptualisation :
 
Je vais avoir une classe "dossier" et une classe "fichier" de la forme suivante:

Code :
  1. class dossier {
  2.    public string nomDuDossier;
  3.    public dossier (string _nomDeDossierCourant)
  4.    {
  5.        this.nomDuDossier = _nomDedossierCourant;
  6.    }
  7.     public int getNomFichier()
  8.     {
  9.         //une fonction de ouf qui prend retourne le nom des fichiers
  10.         //d'un dossier et le stock dans la tableau "tabFichiers"
  11.         return tabFichiers;
  12.     }
  13.     public int getNomDossier()
  14.     {
  15.         //idem avec les noms de dossier
  16.         return tabDossier;
  17.     }
  18. }
  19. class fichier() {
  20.    public string nomDuFichier;
  21.    public fichier (_nomDuFichier)
  22.    {
  23.        this.nomDuFichier=_nomDuFichier;
  24.    }
  25. }
  26. public static void main (String[] args) {
  27.    int i;                                   
  28.    dossier temp = new dossier();    //création d'un nouvel objet
  29.    temp.dossier("c:\test" );          //auquel on donne le nom test
  30.    int nombreFichier;                     
  31.    nombreFichier = temp.getNomFichier.lenght(); //on obtient le nombre de   
  32.                                                //fichier qui correspond a
  33.                                                //la longueur du  
  34.                                                //tableau
  35.    for(i=0;i<nombreFichier-1;i++)
  36.    {
  37.       system.out.println(temp.getNomFichier()[i]); //affichage de chaque nom
  38.                                                     //de fichier du dossier
  39.    }
  40. }

 
 
J'ai encore beaucoup de mal a saisir l'interet de l'O.O. mais bon ca peut venir qu'en en fesant.
 
Est ce que ce genre de raisonnement colle a la POO ?
Est ce que je fonce droit dans le mur et ca va jamais marcher ?
je veux juste un peu comprendre :)
Merci d'avance pour toute aide !

mood
Publicité
Posté le 15-09-2005 à 16:50:05  profilanswer
 

n°1200610
frabill
Posté le 15-09-2005 à 17:28:07  profilanswer
 

déjà il y a quelques erreurs basiques :
 
- le mot clé est "String" et pas "string"
 
- tu as défini un constructeur "dossier (string _nomDeDossierCourant)" , tu dois t'en servir dans ton main  pour instancier ta classe (et pas faire un temp.dossier qui n'est pas valide car il s'agit d'un constructeur et non d'une méthode)
 
- ta méthode getNomFichier() , elle retourne le nombre d'éléments ou un tableau avec tous ces éléments ?
 
 
... il y a d'autres trucs à discuter, mais ce sera pour plus tard


Message édité par frabill le 15-09-2005 à 17:30:01
n°1200626
sircam
I Like Trains
Posté le 15-09-2005 à 17:44:31  profilanswer
 

Avant de poster du code, tu ne penses pas que tu devrais au moins t'assurer qu'il COMPILE ???
 
[:pingouino]
 
Fondamentalement, pq ne pas utiliser java.io.File, qui "modélise" déjà valablement un fichier ? Là, effectivement, c'est tenter de faire de la P.O.O. pour le plaisir.
 
A part ça :
 
- Cf frabill;
- Nom de classe commence par une majuscule;
- Ta méthode "getNomDeFichier()" est abérrante : retourne-t-elle un nom de fichier, un tableau de je ne sais pas quoi ou un entier ?
- Qté d'autres trucs pour après.

n°1200631
ash08
Posté le 15-09-2005 à 18:04:16  profilanswer
 

oki String c'est corrigé
 
J'ai fais la modification pour le constructeur, est ce que c'est ca que tu voulais dire ?
 
et donc ouai, getNomFichier() retournerai un tableau de chaine de caractere.
Je l'ai mis dans un tab dans le main pour rendre que ca soit un peu plus clair.
 
Voila ce que ca donnerai :

Code :
  1. public static void main (String[] args) {
  2.    int i;
  3.    int nombreFichier;
  4.    String tab[];
  5.    Dossier temp = new Dossier("c:/test" );
  6.    tab = temp.getNomFichier()
  7.    nombreFichier = tab.lenght();
  8.  
  9.    for(i=0;i<nombreFichier-1;i++)
  10.    {
  11.       system.out.println(tab[i]);
  12.    }
  13. }


 
[edit -> le but final n'est pas du tout juste d'afficher pour le plaisir :)
je souhaite ensuite réaliser une connexion a une base SQL et enregistrer tous les fichiers.
Mais j'ai envie de le coder et pas de repomper 3 codes et basta!  
je ne connais pas java.io.file vu que c'est mon 1er jour de prog en java mais je vais me documenter un peu dessus]
 
Aie aie aie d'autres d'autre trucs qui ne vont pas ?  :pt1cable:


Message édité par ash08 le 15-09-2005 à 18:14:06
n°1200790
Profil sup​primé
Posté le 16-09-2005 à 08:18:20  answer
 

Ok pour le contructeur maintenant.
Ok aussi pour le tableau à une remarque près : ta fonction getNomFichier() devra avoir la signature suivante ( pas d'entier retourné mais un String [] ) :

Code :
  1. public String [] getNomFichier(){
  2.    //...
  3. }


Pour ce qui est de la méthode de faire, je te conseille de passer par la classe java.io.File et notament sa méthode listFiles() qui - pour un dossier - te retourne un tableau de File ( File [] ) pointants vers tous les "objets" ( fichiers + répertoires ) contenu à l'intérieur ( mais non récursivement ).
Il te suffira de faire faire une petite méthode récursive pour te balader récursivement dans les sous-répertoires.
Autre conseil : évite d'utiliser un tableau de String dans ta méthode récursive ( non optimisé ). Utilise plutot des objets implémentant java.util.Collection --> voir javadoc pour le plus approprié à ton cas ( unicité ou non, trié ou non etc... )

n°1200911
ash08
Posté le 16-09-2005 à 10:56:04  profilanswer
 

D'accord merci pour le conseil, je vais regardé dans cette direction  :jap:  
 
Une autre question, j'ai lu dans "penser en java" qu'il est fortement conseillé d'utiliser un fichier par class, je suppose donc que la classe contenant le main devra "appeler" ou "importer" les autres classes. De quelle maniere ca se présente dans le code ?
 

n°1200920
frabill
Posté le 16-09-2005 à 11:04:28  profilanswer
 

ash08 a écrit :

D'accord merci pour le conseil, je vais regardé dans cette direction  :jap:  
 
Une autre question, j'ai lu dans "penser en java" qu'il est fortement conseillé d'utiliser un fichier par class, je suppose donc que la classe contenant le main devra "appeler" ou "importer" les autres classes. De quelle maniere ca se présente dans le code ?


 
tu pourrais quand même chercher un peu par toi-même non ? C'est le genre de choses qui se trouve facilement dans les bouquins ou sur le net...
 
Essaye de compiler et si tu as des problèmes reviens ici...

n°1201107
Profil sup​primé
Posté le 16-09-2005 à 14:58:47  answer
 

Comme le dis Frabill, c'est vraiment la base du langage.  
Ce n'est pas pour me moquer de toi ou chercher à faire le malin, mais à mon avis si tu bloques déjà là-dessus c'est pas la peine d'aller plus loin.
Je serais toi, je commencerais ... par le commencement. En prenant des exemples tout simples comme ceux proposés par les bouqins pour débutter en java.
Bon, sinon, je vais quand même répondre à ta question, mais promets-moi de cherche un peu aussi sinon ...  [:lorill]  
tu crée une classe Lancement ( fichier Lancement.java ) et tu mets dedans :  

Code :
  1. public class Lancement{
  2.   public Lancement() {
  3.      int i;
  4.      int nombreFichier;
  5.      String tab[];
  6.      Dossier temp = new Dossier("c:/test" );
  7.      tab = temp.getNomFichier()
  8.      nombreFichier = tab.lenght();
  9.    
  10.      for(i=0;i<nombreFichier-1;i++)
  11.      {
  12.         system.out.println(tab[i]);
  13.      }
  14.   }
  15.   public static void main(String [] args){
  16.     new Lancement();
  17.   }
  18. }


Message édité par Profil supprimé le 16-09-2005 à 14:59:53
n°1202170
ash08
Posté le 19-09-2005 à 10:55:01  profilanswer
 

Yop les gens!
merci beaucoup pour votre aide.
Finalement je suis parti sur une seule classe appelé ScanSql.
J'arrive a réalisé le scan d'un dossier, la connexion a la base SQL, a faire une requete de select mais pas d'insertion.
Je vous met le code de suite.

Code :
  1. import java.io.*;
  2. import java.sql.*;
  3. public class ScanSql {
  4.     public static void main(String[] args) throws Exception {
  5.         if (args.length != 1) { //si dans la ligne de commande y a pas d'argument
  6.             System.out.println("Please choose a folder. (eg: \"ScanSql c:\\\" ) " );
  7.             System.exit(0);     //error
  8.         }
  9.  String pilote = "com.mysql.jdbc.Driver"; 
  10.     Class.forName(pilote);                    //chargement du pilote pour MySql       
  11.  Connection connexion = DriverManager.getConnection("jdbc:mysql://GI4/test","root","d8abas3!" );
  12.  Statement instruction = connexion.createStatement();
  13.        
  14.  File f = new File(args[0]);             
  15.         String [] files = f.list();               //liste les fichiers du répertoire
  16.         for(int i =0; i < files.length; i++) {   
  17.             if (new File(args[0] + "\\" + files[i]).isDirectory()) {
  18.                 System.out.print("Folder : " );   
  19.             } else {
  20.    sql = "INSERT INTO `netfiles` ( `id` , `name` ) VALUES ('',"+ files[i].getName() + " )";
  21.    instruction.executeUpdate(sql); //execution de la requete d'insertion
  22.                 System.out.print("File : " );
  23.             }
  24.             System.out.println(args[0] + "\\" + files[i]); //affichage des répertoires et fichiers contenu dans le repertoire courant justes pour avoir un rendu...
  25.         } 
  26. }
  27. }


 
En fait, il merde sur la ligne  

Code :
  1. sql = "INSERT INTO `netfiles` ( `id` , `name` ) VALUES ('',"+ files[i].getName() + " )";


Il me dit qu'il ne reconnait pas la method getName()  :heink:  
Alors pour débugguer, j'ai essayé de mettre une requette bidon :

Code :
  1. sql = "INSERT INTO `netfiles` ( `id` , `name` ) VALUES ('','test')";


Mais c'est pareil il met une erreur : Data truncated for column 'id' at rows 1  :ouch:  
Pour cette derniere erreur j'ai matté dans google et on tombe sur une liste d'erreur sur le manuel de Mysql mais pas a quoi elle correspond :/
 
Merci d'avance pour votre aide.

Message cité 1 fois
Message édité par ash08 le 19-09-2005 à 11:30:16
n°1202318
boulax
Inserer phrase hype en anglais
Posté le 19-09-2005 à 13:23:50  profilanswer
 

ash08 a écrit :

Yop les gens!
 
Il me dit qu'il ne reconnait pas la method getName()  :heink:  


 

Code :
  1. String [] files = f.list();               //liste les fichiers du répertoire


 
de rien [:moule_bite]


---------------
Posté depuis des chiottes, sales. Me gusta.
mood
Publicité
Posté le 19-09-2005 à 13:23:50  profilanswer
 

n°1202347
Profil sup​primé
Posté le 19-09-2005 à 13:57:29  answer
 

plutot que :  

Code :
  1. String [] files=f.list();


utilise :

Code :
  1. File [] files=f.listFiles();


ton getName() devrait beaucoup mieux marcher...

n°1202698
ash08
Posté le 19-09-2005 à 18:14:16  profilanswer
 

Merci je n'ai plus l'erreur sur la method getName()
 
J'ai aussi ajouté "String" devant la variable sql qui n'était pas déclarer  :bounce:  
 
En revanche, je me casse la tete sur la requete mysql qui devrait etre toute simple.
 

Code :
  1. File [] files = f.listFiles();               //liste les fichiers du répertoire
  2. for(int i =0; i < files.length; i++) {   
  3.     if (new File(args[0] + "\\" + files[i]).isDirectory()) {
  4.         System.out.print("Folder : " );   
  5.     } else {
  6. String sql = "INSERT INTO `netfiles` ( `id` , `name` ) VALUES ('',"+ files[i].getName() + " )";
  7. instruction.executeUpdate(sql); //execution de la requete d'insertion
  8.     System.out.print("File : " );
  9.     }
  10.     System.out.println(args[0] + "\\" + files[i]); //affichage des répertoires et fichiers contenu dans le repertoire courant justes pour avoir un rendu...
  11. }


 
L'erreur est la suivante :
Exception in thread "main" java.sql.exception: Unknow table '1_fichier' in the field list.
1_fichier se trouve etre toujours le nom du 1er fichier scanner dans mon répertoire.
Mais la je suis perdu, j'ai beau relire et relire je vois pas  :sweat:  


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  scan de dossier (débutant)

 

Sujets relatifs
php debutant aide scriptdebutant php
Debutant en programmation pour page web PHP[swing] [debutant] geler les sous jframe
Plus loin que l'envoi d'images sur dossier FTP[Debutant] Problème Hibernate
[Débutant] Problème J2EE - Méthode statiquequel bouquin pour un debutant en C#
Aide pour un débutantTest application lancée (débutant)
Plus de sujets relatifs à : scan de dossier (débutant)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR