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 :

FileOutputStream et jUnit : comment effacer le fichier en fin de test


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2006
    Messages : 15
    Par défaut FileOutputStream et jUnit : comment effacer le fichier en fin de test
    Bonjour,

    J'ai une classe avec une méthode A qui ouvre un FileOutputStream.
    Comme c'est une initialisation, il n'y a pas de flush/close dans cette méthode.
    Ce qui fait que lors de l'éxecution du junit de cette méthode, un fichier est créé sur le disque, mais n'est pas libéré.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public void init() {
    ...
    OutputStream f= new FileOutputStream("nomFichier.txt" false);
    ...
    }
    Une fois les junits effectués sur cette méthode, j'ai besoin d'effacer ce fichier, or cela m'est impossible car à priori le flux est toujours ouvert ou occupé par un autre processus.

    Comment puis-je faire pour effacer ce fichier de test ? Y a-t-il un moyen de récupérer la liste des flux ouverts en fin de tests, de les fermer afin de pouvoir effacer les fichiers ?

    J'ai essayé de faire un delete dans une méthode @After et @AfterClass du junit, mais sans succès.


    Merci d'avance

  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
    garde une référence sur le outputstream, et comme un grande fait un close dessus puis un delete sur le file.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2006
    Messages : 15
    Par défaut comment ?
    Merci, bon j'ai essayé de placer les output en attributs pour avoir accès par les getters, mais cela ne change rien. Je débute un peu dans le traitement des fichiers, et là je vois pas comment faire. Il y a un problème sans doute tout bête à résoudre mais je vois pas.

    En résumé, je fais:

    Classe:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class A {
     
    private OutputStream outStream;
     
    public void init () {
     
       outStream = new FileOutputStream(...)
    }
    Remarque: je n'ai pas la possibilité de faire un flush/close en fin de méthode init, car les fichiers ouverts sont utilisés dans d'autres méthodes.
    Le junit me pose donc problème pour qu'il soit "idempotent"

    jUnit:

    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
    A a = new A();
     
    public void testInit() {
      // initialisations
     // test de la méthode
      a.init();
     
      // asserts
     
      // j'essaie de fermer les flux
      a.getOutStream().flush;
     a.getOutStream().close;
     
     // ouverture des fichiers créés pour les effacer
      File f = new File("fichier");
      f.delete
     
    }
    le f.delete retourne false systématiquement, le fichier n'est pas effacé...
    je comprends pas pourquoi. J'ai dû louper une étape ou je m'y prends comme un pied ?

  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
    le flush ne sert à rien, le close devrais suffire. Curieux que le delete ne marche pas.

    ALternativement (mais c'est pas parfait) tu as le deleteOnExit sur le File qui pourrait te servir :/

  5. #5
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 901
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 901
    Billets dans le blog
    54
    Par défaut
    PS : dans certains cas (nottament l'utilisation de PrintStream ou PrintWriter, je ne sais plus trop) flush() est necessaire sinon le flux est ferme avant que son contenu ne soit totalement ecrit.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

Discussions similaires

  1. effacement de fichier en fin de download
    Par SpaceFrog dans le forum Langage
    Réponses: 4
    Dernier message: 20/10/2011, 08h45
  2. Comment effacer un fichier alors qu'avec root ca ne marche pas
    Par pierrot10 dans le forum RedHat / CentOS / Fedora
    Réponses: 7
    Dernier message: 14/02/2011, 18h59
  3. [W2K] comment effacer les fichiers temp d'ie à distance?
    Par altadeos dans le forum Windows 2000/Me/98/95
    Réponses: 2
    Dernier message: 05/10/2007, 14h43
  4. comment effacer la premiere ligne dans un fichier
    Par aliosys dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 29/12/2005, 10h14
  5. comment effacer le contenu d'un fichier
    Par groult jeremy dans le forum C++
    Réponses: 2
    Dernier message: 21/11/2005, 17h25

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