IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

Problème accès à un dossier+fichiers


Sujet :

Entrée/Sortie Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Problème accès à un dossier+fichiers
    Bonjour,

    je vous souhaite à toutes et à tous une bonne année 2014, avec un peu de retard.
    Je viens vous voir aujourd'hui car j'ai fais un script, qui prend en entrée un dossier (qui comprend deux autres dossiers, et chacun de ces deux dossiers comprend des fichiers .txt). Le but étant de lire les fichiers txt, comparer tous les mots de tout les fichiers, et supprimer les mots non fréquents.
    Sauf, qu'à ma surprise, il me dit qu'il n'y pas de dossier, alors qu'il y est. Je ne comprend pas :s
    Voici le script entier.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    import java.io.File;
    import java.io.PrintWriter;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Scanner;
    import java.util.StringTokenizer;
     
     
    public class suppMotsNonFrequents
    {
     
        //---------------------------------------------------------------------------------------------------------------
        //NECESSARY OBJECTS
        protected ArrayList<String>   corpusClasses = new ArrayList<String>();
        protected ArrayList<ArrayList<String>>  corpusDocuments = new ArrayList<ArrayList<String>>();
        protected ArrayList<ArrayList<ArrayList<String>>> corpus = new ArrayList<ArrayList<ArrayList<String>>>();
     
        protected HashMap<String,Integer> tableWordsIndex = new HashMap<String,Integer>();
        protected HashMap<Integer,String> tableIndexWords = new HashMap<Integer,String>();
     
     
        //---------------------------------------------------------------------------------------------------------------
        //CONSTRUCTOR
        public suppMotsNonFrequents(){ super();}
     
        //---------------------------------------------------------------------------------------------------------------
        //CORPUS INITIALIZER
        public void initializer(String corpusLocation) throws Exception
        {
            File   corpusFilePath       = new File(corpusLocation); //root directory
            File[] corpusFiles          = null;
            File[] documentsFromClass   = null;
            File   documentLocationFile = null;
     
            ArrayList<String> document  = new ArrayList<String>();
            ArrayList<String> tempdocument  = new ArrayList<String>();
            ArrayList<ArrayList<String>> documents  = new ArrayList<ArrayList<String>>();
     
     
            //CHECKING IF IT EXISTS A FOLDER AND CHEACKING IF CLASS INSIDE
            if(corpusFilePath.exists() && corpusFilePath.isDirectory() && (corpusFilePath.listFiles().length > 0) )
            {
                //GETTING CLASS LIST
                corpusFiles = corpusFilePath.listFiles();
     
                //LOOP FOR EACH CLASS
                for(int i =0; i < corpusFiles.length; i++)
                {
                    //SETTING UP ALL CLASS NAME
                    this.corpusClasses.add(corpusFiles[i].getName());
     
                    //GETTING DOCUMENTS LIST FILE FROM CLASSE
                    documentsFromClass = corpusFiles[i].listFiles();
     
                    //LOOP FOR EACH DOCUMENT
                    for(int j =0; j < documentsFromClass.length; j++)
                    {
                        //GETTING DOCUMENTS LOCATION FILE NAME
                        documentLocationFile = new File(documentsFromClass[j].getPath());
     
                        //GETTING EACH DOCUMENTS NAME
                        tempdocument.add(documentLocationFile.getName());
     
                        //PROCESSING DOCUMENT
                        this.processingDocument(documentLocationFile.getPath(),document);
     
                        //CREATING DOCUMENTS LIST FOR EACH CLASS
                        documents.add(document);
     
                        //RESTARTING LISTS FOR NEXT LOOP
                        document  = new ArrayList<String>();
                    }
     
                    //SETTING UP CORPUS DOCUMENTS NAME
                    this.corpusDocuments.add(tempdocument);
     
                    //SETTING UP THE CORPUS
                    corpus.add(documents);
     
                    //RESTARTING LISTS FOR NEXT LOOP
                    documents = new ArrayList<ArrayList<String>>();
                }
            }
            else
            {
                System.out.println("File doesn't exists..");
            }
        }
     
        //---------------------------------------------------------------------------------------------------------------
        //DOCUMENT READER METHOD
        public void processingDocument(String documentPath,ArrayList<String> document) throws Exception
        {
            Scanner documentReader = new Scanner(new File(documentPath));
     
            ArrayList<String> lineWords = new ArrayList<String>();
            String documentLine = new String();
     
            //CREATING DOCUMENT
            while (documentReader.hasNext())
            {
                documentLine = documentReader.next();
                if(documentLine != null)
                {
                    //GETTING LIST WORDS PAR LINE
                    lineWords = processingLine(documentLine);
     
                    for(int i =0; i < lineWords.size(); i++)
                    {
                        //CREATING DOCUMENT
                        document.add(lineWords.get(i));
                    }
                }
            }
     
            //CLOSING BUFFED-READER
            documentReader.close();
        }
     
        //---------------------------------------------------------------------------------------------------------------
        //LINE READER METHOD
        public ArrayList<String> processingLine(String documentLine)
        {
            StringTokenizer tokens = new StringTokenizer(documentLine);
            ArrayList<String> words = new ArrayList<String>();
            String word = new String();
     
            while (tokens.hasMoreTokens())
            {
                //SETTING ALL CHARACTERS ON LOWERCASE
                word = tokens.nextToken().toLowerCase();
     
                words.add(word);
            }
     
            return words;
        }
     
        //---------------------------------------------------------------------------------------------------------------
        //GETTING HOW MANY TIMES THE WORD IS USED ON THE CORPUS
        public int getFrequencyOfWordInCorpus(String word)
        {
            int frequencyOnCorpus = 0;
     
            for(int i =0; i< this.corpus.size();i++)
            {
                for(int j=0; j< this.corpus.get(i).size();j++)
                {
                    for(int k = 0; k < corpus.get(i).get(j).size();k++)
                    {
                        if(word.equals(corpus.get(i).get(j).get(k).toString()))
                        {  
                            frequencyOnCorpus ++;
                        }
                    }
                }
            }
            return frequencyOnCorpus;
        }
     
        //---------------------------------------------------------------------------------------------------------------
        //NEW CORPUS CREATION METHOD
        public void createNewCorpus(String fileNamePath) throws Exception
        {
            if(corpus.size() > 0)
            {
                //CREATING FILE
                File file = null;
                PrintWriter writer = null;
     
                //GENERATING ELEMENTS
                for(int i =0; i< this.corpus.size();i++)
                {
                    //FOLDER CLASS CREATION
                    file = new File(fileNamePath+"/"+this.corpusClasses.get(i).toString());
     
                    if(file.mkdir())
                    {
                        for(int j= 0; j< this.corpus.get(i).size();j++)
                        {
                            //DOCUMENT CREATION
                            File file1 = new File(file.getPath()+"/"+this.corpusDocuments.get(i).get(j).toString());
                            file1.createNewFile();
     
                            //RESTARTING OBJECTS
                            writer = new PrintWriter(file1.getPath());
                            String stringLine = new String();
     
                            for(int k = 0; k < this.corpus.get(i).get(j).size();k++)
                            {
                                //FREQUENCY PRESICION
                                if(this.getFrequencyOfWordInCorpus(this.corpus.get(i).get(j).get(k).toString()) >= 10)
                                {
                                    //TO CONCAT WORDS OF DOCUMENT
                                    stringLine += this.corpus.get(i).get(j).get(k).toString()+" ";             
                                }
                            }
     
                            //WRITING ON FILE
                            writer.println(stringLine.substring(0, (stringLine.length()-1)));
     
                            //CLOSING FILE
                            writer.close();
                        }
                    }
                }  
     
                System.out.println("New corpus created successfully...");
            }
            else {System.out.println("The corpus is not started...");}
        }
     
        //---------------------------------------------------------------------------------------------------------------
        //MAIN FUCTION
        public static void main(String[] args) throws Exception
        {
            //CLASS INSTANCE
            suppMotsNonFrequents eraser = new suppMotsNonFrequents();
     
            //NEEDED PATHS
            String corpusPath         = "/Corpus"; 
            String outputLocationPath = "/corpusNew";
     
            //STARTING CORPUS
            eraser.initializer(corpusPath);
     
            //CERATING NEW CORPUS ORDER
            System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
            eraser.createNewCorpus(outputLocationPath);
            System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
     
        }
     
        //---------------------------------------------------------------------------------------------------------------  
    }
    Voilà ce que ça me renvoi :
    File doesn't exists..
    >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    The corpus is not started...
    >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    Pour info je suis sur eclipse (Mac Os X)
    En vous remerciant.

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    C'est dû à l'emplacement de ton dossier "/Corpus" : il commence par un slash, donc c'est un chemin absolu. Si ton dossier est dans ton dossier d'exécution (ou dans ton projet), ne met pas de slash devant.

    Tu peux vérifier le path absolu d'un fichier en traçant dans ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     public void initializer(String corpusLocation) throws Exception
        {
            File   corpusFilePath       = new File(corpusLocation); //root directory
            System.out.println( "corpus path: " + corpusFilePath.getAbsolutePath() );
       ...
    Tu pourras ainsi connaître l'emplacement exact du fichier qui sera traité par ton programme.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Bonjour,
    Merci pour votre réponse.

    En effet, j'ai ajouté la ligne pour connaitre le path exacte, j'ai enlevé le slash, du coup ça me renvoit une exception :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    corpus path: /Users/monordi/Documents/workspace/Projet/corpus
    Exception in thread "main" java.lang.NullPointerException
    	at suppMotsNonFrequents.initializer(suppMotsNonFrequents.java:57)
    	at suppMotsNonFrequents.main(suppMotsNonFrequents.java:226)
    Je ne vois pas où est le problème là non plus..

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    940
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 940
    Points : 1 817
    Points
    1 817
    Par défaut
    La méthode listFiles de File renvoie null si le chemin de fichier désigne un fichier et non un dossier. Donc documentsFromClass est null et l'expression "documentsFromClass.length" provoque une NullPointerException.

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Difficile de le savoir sans avoir la ligne de code 57 (la ou survient l'exception).

    Mais je peux deviner que ça peut arriver si le dossier corpusFilePath est vide, puisque, dans ce cas corpusFilePath.listFiles() sera null.

    Et également, là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     //GETTING DOCUMENTS LIST FILE FROM CLASSE
    documentsFromClass = corpusFiles[i].listFiles();
     
     //LOOP FOR EACH DOCUMENT
    for(int j =0; j < documentsFromClass.length; j++)
    La variable documentsFromClass contiendra null si le dossier corpusFiles[i] est vide, donc documentsFromClass.length causera une NPE.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    La ligne 57 est bien celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     //LOOP FOR EACH DOCUMENT
    for(int j =0; j < documentsFromClass.length; j++)
    Le truc est que le dossier n'est pas vide, il contient deux autres dossiers avec chacun plus d'une vingtaine de fichiers txt

  7. #7
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Affiches aussi corpusFiles[i].getAbsolutePath() pour être sur que cela soit bien le dossier que tu penses.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Merci!
    j'ai déjà un début de reponse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    corpus path: /Users/monordi/Documents/workspace/projet/corpus
    corpus files: /Users/monordi/Documents/workspace/projet/corpus/.DS_Store
    Exception in thread "main" java.lang.NullPointerException
    	at suppMotsNonFrequents.initializer(suppMotsNonFrequents.java:59)
    	at suppMotsNonFrequents.main(suppMotsNonFrequents.java:228)
    ça parcoure le fichier caché .DS_STORE, comment faire pour éviter cela?

  9. #9
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    La méthode la plus simple, c'est de tester si le nom du fichier est égal à ".DS_Store", et de ne pas le traiter si c'est le cas.

    Tu peux également utiliser un filtre que tu passes à la méthode listFile() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    corpusFiles = corpusFilePath.listFiles(new FileFilter() {
     
        @Override
        public boolean accept(File pathname) {
            if ( ".DS_Store".equals(pathname.getName()) ) {
                return false; // on ne veut pas traiter ces fichiers
            }
            return true; // on traite tous les autres fichier
        }
     
    });
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    ça à l'aire d'avancer! Je vous remercie

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. même problème acces concurrent aux fichiers sur le serveur
    Par al3alwa dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 11/06/2007, 16h51
  2. Problème d'accès à un dossier partagé / accès poste
    Par TicTacToe dans le forum Administration
    Réponses: 1
    Dernier message: 08/08/2006, 14h13
  3. Problème accès Fichier Excel
    Par motte82 dans le forum C++Builder
    Réponses: 5
    Dernier message: 20/07/2006, 19h18
  4. [C#] Acces aux dossiers et fichiers d'un Serveur
    Par laetyboop dans le forum Windows Forms
    Réponses: 4
    Dernier message: 13/04/2006, 11h08
  5. problème d'acces concurentiel à un fichier
    Par Theoden dans le forum MFC
    Réponses: 2
    Dernier message: 04/03/2004, 09h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo