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 :

Accéder à un répertoire distant


Sujet :

Entrée/Sortie Java

  1. #1
    Membre actif
    Inscrit en
    Mai 2004
    Messages
    297
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 297
    Points : 207
    Points
    207
    Par défaut Accéder à un répertoire distant
    Bonjour,

    J'ai développé une classe java qui utilise le java.io.file pour lister pour un répertoire donné la liste des sous-répertoires disponibles ainsi que les fichiers du répertoire courrant... Ca marche bien sur les disques locaux, mais pas pour les disques réseaux...

    Pour info, cette classe est utilisée par des fonctions/procédures oracle stockée en base...

    Pour un répertoire d'un disque réseau, la fonction checkDir me retourne "unkown"...

    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
     
    import java.io.*;
    import java.util.*;
    import java.text.*;
     
    public class dirContents
    {
      // Date format for file "last modified" date
      static private Format daf = new SimpleDateFormat("dd MMM yyyy HH:mm:ss");
     
      // Return "unknown" if the given directory name does not correspond to an existing directory
      public static String checkDir (String dir) {
        File f = new File (dir);
        if (!f.exists()) return "unknown";
        if (!f.isDirectory()) return "unknown";
        return dir;
      }
     
      // Retrieve files and directories for a given directory
      public static String GetDirFiles (String dir) {
        File f = new File (dir);
        String[] filesList = f.list();
        String path = f.getPath();
        String listf = new String();
        String listd = new String();
        for (int i = 0; i < filesList.length; i++) {
          File f2 = new File(path, filesList[i]);
          if (f2.isDirectory()) {
            listd = listd + "£d" + filesList[i];
          } else
            listf = listf + "£f" + filesList[i];
        }
        return listd + listf;
      }
     
      // Retrieve file's informations for a given file
      public static String GetFileInfo (String filename) {
        File f = new File (filename);
        Date lastModif = new Date(f.lastModified());
        String fileDate = daf.format(lastModif);
        return f.length() + "£" + fileDate;
      }
     
      // Retrieve all directories and sub-directories for a given directory
      public static String GetDirList (String dir, int level) {
        File f = new File (dir);
        String[] filesList = f.list();
        String path = f.getPath();
        String contents = new String();
        for (int i = 0; i < filesList.length; i++) {
          File f2 = new File(path, filesList[i]);
          if (f2.isDirectory()) {
            contents = contents + "£l" + level + "-d" + filesList[i];
            // Recursive call to gett all sub-directories names and levels
            level++;
            String contents2 = GetDirList(dir + "\\" + filesList[i], level);
            contents = contents + contents2;
            level--;
          }
        }
        return contents;
      }
    }
    Si qqun avait une astuce...

    Merci d'avance.

  2. #2
    Membre actif
    Avatar de Didier
    Profil pro
    Developper
    Inscrit en
    Mars 2002
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Developper

    Informations forums :
    Inscription : Mars 2002
    Messages : 163
    Points : 299
    Points
    299
    Par défaut
    Quel est le format de ta chaîne dir ?

  3. #3
    Membre actif
    Inscrit en
    Mai 2004
    Messages
    297
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 297
    Points : 207
    Points
    207
    Par défaut
    La chaîne dir pour un répertoire sur un disque local est du type chemin complet <disque>:\<répertoire racine>\<répertoire à lister> (ex : "D:\fileserver\docs")

    Pour un accès à un répertoire d'un disque réseau, je voudrais le même principe... A savoir "F:\fileserver\docs" où F correspond à un disque réseau du style <server>\<répertoire partagé>...
    J'ai essayé ma classe java avec la chaîne dir du style "F:\fileserver\docs", "\\<server>\<partage>\fileserver\docs" ou encore "\\<@IP server>\<partage>\fileserver\docs"...

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2004
    Messages : 85
    Points : 107
    Points
    107
    Par défaut
    Hello,

    Simple question au cas où, est-ce que tu utilises un "\" comme séparateur ou un "\\" ? Essaie avec "\\"...

    Ex : "C:\temp\..." remplacé par "C:\\temp\\..."

  5. #5
    Membre actif
    Inscrit en
    Mai 2004
    Messages
    297
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 297
    Points : 207
    Points
    207
    Par défaut
    c:\temp sur disque local fonctionne
    c:\\temp sur disque local fonctionne
    f:\temp sur disque réseau ne marche pas
    f:\\temp sur disque réseau ne marche pas...
    Par contre, je viens de faire un autre test :
    //<server>/<share>/temp fonctionne... mais ça ne me convient qu'à moitié...

  6. #6
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Je viens de tester ton code sur un disque réseau et ca marche...
    exists() et isdirectory() retourne true tous les deux !

    Es-tu sûr de ne pas avoir de problèmes réseaux ?

    a++

  7. #7
    Membre actif
    Inscrit en
    Mai 2004
    Messages
    297
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 297
    Points : 207
    Points
    207
    Par défaut
    Il n'y a pas de problèmes réseaux apparement... J'accède très bien aux disques réseaux par l'explorateur...

    Quelle syntaxe tu as utilisé, et sur quelle plateforme ?

  8. #8
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    J'ai copié ton code de checkDir() auquel j'ai rajouté des traces afin de voir les valeurs de exists() et isDirectory()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    checkDir ("C:\\repertoire"); // disque local
    checkDir ("Q:\\repertoire"); // disque reseau
    Plateforme WinXP SP1 - JRE 1.4.0

  9. #9
    Membre actif
    Inscrit en
    Mai 2004
    Messages
    297
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 297
    Points : 207
    Points
    207
    Par défaut
    Bon... chez moi, ça ne marche toujours pas...
    As-tu essayé un GetDirFiles ("Q:\\repertoire") ?

    Pour compliquer la chose... J'ai des fonctions Oracle qui me permettent d'exécuter les fonctions de ma classe java (chkdir pour la fonction java checkDir)... Lorsque je les utilise pour des répertoires d'un disque local, ça marche...
    "select chkdir ('c:\temp') from dual;" => ok (disque local)

    Maintenant, pour un disque réseau : Si je fais un
    - "select chkdir ('F:') from dual;" => ok (disque réseau trouvé)
    - "select chkdir ('F:\temp') from dual;" => non trouvé
    - "select chkdir ('F:\\temp') from dual;" => non trouvé

    Autre chose... Comme le checkDir de F: marche, j'essaye de lister son contenu :
    - "select getdir ('F:') from dual;" (appel du la fonction java GetDirFiles), j'obtiens le message suivant : "java.lang.NullPointerException"...

    En gros, j'ai l'impression qu'il y a des limitations Oracle qui traînent

  10. #10
    Membre actif
    Inscrit en
    Mai 2004
    Messages
    297
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 297
    Points : 207
    Points
    207
    Par défaut Résolu !!!!!
    Résolu !!!!!!

    Thanks guys !!

    C'était bien une limitation Oracle...

    Pour solutionner ce truc, il fallait simplement démarrer la base Oracle avec un user ayant les droits d'accès aux répertoires du disque réseaux (et non pas avec le "localSystem" par défaut)... <merci Thierry>


    @+

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/11/2008, 12h34
  2. Réponses: 8
    Dernier message: 12/11/2007, 12h04
  3. [C#]Accéder à un répertoire partagé sur une machine distante
    Par spaceclic dans le forum Windows Forms
    Réponses: 15
    Dernier message: 14/05/2007, 15h43
  4. Répertoire distant
    Par rob_57 dans le forum ASP
    Réponses: 3
    Dernier message: 19/05/2006, 19h43
  5. Lister le contenu d'un répertoire distant
    Par dody dans le forum Langage
    Réponses: 3
    Dernier message: 06/10/2005, 17h23

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