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 :

File.createNewFile() crée un dossier sur Linux


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut File.createNewFile() crée un dossier sur Linux
    Bonjour,

    J'ai actuellement un problème bizarre et très dérangeant.

    J'ai une méthode de test qui fait ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    addFile("file.txt");
     
    FileUtils.downloadFile("http://baptiste-wicht.developpez.com/dl.txt", getPath("file.txt"));
    getPath() donne juste l'adresse absolue du fichier tempoaire, ici /tmp/unit/file.txt

    addFile("file.txt") fait ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    file = new File(System.getProperty("java.io.tmpdir") + "/unit/", "file.txt")
     
    try {
         if(!file.createNewFile()){
              fail("Unable to create the file {" + file.getAbsolutePath() + " }");
         }
    } catch (IOException e) {
         fail("Unable to create the file {" + file.getAbsolutePath() + " } due to " + e.getMessage());
    }
    et downloadFile() va télécharger un fichier et l'écrire sur le disque. L'opération d'écriture est faite ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    FileOutputStream destinationFile = null;
    try {
         destinationFile = new FileOutputStream(destination);
     
         destinationFile.write(data);
     
         destinationFile.flush();
    } finally {
          close(destinationFile);
    }
    Sous Windows, ça fonction à merveille, mais sous Linux (Debian Stable) ou se trouve mon serveur d'intégration continue, impossible...

    J'ai une exception sur cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    destinationFile = new FileOutputStream(destination);
    L'existe indique :

    java.io.FileNotFoundException: /tmp/unit/file.txt (Is a directory)
    C'est comme s'il m'avait créé un dossier alors que j'ai bien spécifié createNewFile et que c'est /tmp/unit/file.txt...

    Je vois pas pourquoi c'est un dossier

    Si quelqu'un avait une idée, ça m'arrangerait vraiment beaucoup

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    t'as supprimé ce dossier pour t'assurer qu'il est pas là, en train de déranger, suite à une erreur de manip?

  3. #3
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    t'as supprimé ce dossier pour t'assurer qu'il est pas là, en train de déranger, suite à une erreur de manip?
    Ca se fait automatique dans les tests unitaires. Le dossier unit est créé au début des tests et supprimmé intégralement ainsi que tout son contenu après la suite de tests

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    createFile renvoie true si il existe déjà un "file.txt", même si c'est un répertoire. Je te conseille de changer ton test comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    try {
         if(file.exists() && file.isDirectory())
              fail("File already exists but is a directory {" + file.getAbsolutePath() + " }");
         if(!file.createNewFile()){
              fail("Unable to create the file {" + file.getAbsolutePath() + " }");
         }
    } catch (IOException e) {
         fail("Unable to create the file {" + file.getAbsolutePath() + " } due to " + e.getMessage());
    }
    a mon avis ce folder a été créé ailleurs dans le code ou depuis l'extérieur du programme.

  5. #5
    Membre Expert
    Avatar de Patriarch24
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 047
    Par défaut
    a mon avis ce folder a été créé ailleurs dans le code ou depuis l'extérieur du programme.
    +1. Trace ton exécution, tu devrais trouver l'erreur (cherche les mkdir en somme) si elle est interne.

Discussions similaires

  1. Droits sur les dossiers sous linux
    Par mims1664 dans le forum Sécurité
    Réponses: 2
    Dernier message: 30/11/2010, 11h51
  2. Réponses: 1
    Dernier message: 13/01/2010, 08h36
  3. Datapump: log file sur Linux (ORA-39002)
    Par Bonnie38 dans le forum Administration
    Réponses: 1
    Dernier message: 23/06/2008, 17h43
  4. Problème unlink() sur dossier partagé Linux
    Par Ethylene dans le forum Langage
    Réponses: 1
    Dernier message: 25/01/2007, 10h48
  5. 8i sur Linux : Erreur loadin shared object file
    Par NGONGO ETABA dans le forum Oracle
    Réponses: 2
    Dernier message: 24/03/2006, 11h40

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