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

Langage Java Discussion :

[Debutant] Ajouter une extension à un fichier puis vérifier son existence


Sujet :

Langage Java

  1. #1
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 650
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 143
    Points
    11 143
    Par défaut [Debutant] Ajouter une extension à un fichier puis vérifier son existence
    bonjour,


    dans mon application j'utilise un JFileChooser avec un filtre ".dat" pour enregistrer les fichiers. Là deux cas de figure se présentent :
    1- L'utilisateur précise l'extension ".dat" du fichier et dans ce cas pas de souci, je peux vérifier l'existence du fichier ou non ;
    2- L'utilisateur ne donne pas l'extension du fichier : et dans ce cas c'est au programme de l'ajouter puis de vérifier si le fichier avec l'extension existe. Et c'est dans ce cas que je bloque


    Voilà mon code : il fonctionne très bien dans le cas n°1 mais pas dans le cas 2 (c'est à dire si l'utilisateur ne précise pas l'extension du fichier) et pour cause je fais un file.exists() avant d'ajouter l'extension.

    Code java : 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
     
    File file = null;
    RandomAccessFile datFile = null;
    String strFile = new String();
    int response;
     
    response = fc.showSaveDialog(this);
    file = fc.getSelectedFile();
     
    if (response==JFileChooser.APPROVE_OPTION)
    {
     
     
    	if (file.exists())
    	{
    		System.out.println("le fichier existe");
    	}
    	else
    	{
    		strFile = file.getPath();
     
    		if (!file.getName().toLowerCase().endsWith(".dat"))
    		{
    			strFile = file.getPath().concat(".dat");
    		}
    		try
    		{
    			datFile = new RandomAccessFile(strFile, "rw");
    			//.....
    		}
    		catch (FileNotFoundException ex)
    		{
    			Logger.getLogger(ScenarioManager.class.getName()).log(Level.SEVERE, null, ex);
    		}
    	}
    }

    Comment je peux modifier le code de telle sorte que si l'utilisateur ne donne pas l'extension du fichier, le programme l'ajoute ? (Ajout de l'extension juste avant l'appel de la méthode file.exists()).


    --------------------
    Je pensais faire comme ceci, mais j'avoue que créer un nouvel objet File simplement pour lui ajouter une extension me gêne un peu. Il n'y a pas une autre méthode ?

    Code java : 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
     
    File file = null;
    RandomAccessFile datFile = null;
    int response;
     
    response = fc.showSaveDialog(this);
    file = fc.getSelectedFile();
     
    if (!file.getName().toLowerCase().endsWith(".dat"))
    {
    	file = new File(file.getPath()+".dat");
    }
     
    if (response==JFileChooser.APPROVE_OPTION)
    {
    	if (file.exists())
    	{
    		System.out.println("le fichier existe");
    	}
    	else
    	{
    		try
    		{
    			datFile = new RandomAccessFile(file, "rw");
    			//.....
    		}
    		catch (FileNotFoundException ex)
    		{
    			Logger.getLogger(ScenarioManager.class.getName()).log(Level.SEVERE, null, ex);
    		}
    	}
    }


    et l'objet RandomAccessFile ne possède pas de méhtode exists() ou de méthode renvoyant un objet File.

  2. #2
    Membre expérimenté Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Points : 1 540
    Points
    1 540
    Par défaut
    Puisque tu dois obligatoirement avoir un .dat tu peux créer ton fichier seulement à la fin non ??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    JFileChooser chooser = new JFileChooser();
    if(chooser.showOpenDialog(this)== JFileChooser.APPROVE_OPTION){
          String chemin = chooser.getSelectedFile().getAbsolutePath());
          if(!chemin .endsWith(".dat")){
                 chemin +=".dat";
          }
          File f = new  File(chemin);
          if(f.exists()){
                System.out.println("le fichier existe");
          }else{
                System.out.println("le fichier n'existe pas");
          }
     
    }

  3. #3
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 650
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 143
    Points
    11 143
    Par défaut
    Citation Envoyé par Ivelios Voir le message
    Puisque tu dois obligatoirement avoir un .dat tu peux créer ton fichier seulement à la fin non ??
    oui c'est ce que je fais dans le second code que j'ai posté. Mais comme le FileChooser renvoie déjà un objet File via la méthode getSelectedFile, je trouve un peu dommage de créer un nouvel objet File pour pour ajouter l'extension au nom du fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    File file = null;
     
    file = fc.getSelectedFile();
     
    if (!file.getName().toLowerCase().endsWith(".dat"))
    {
    	file = new File(file.getPath()+".dat");  // nouvel objet File
    }
     
    if (file.exists())
    {
     //........ la suite du code
    }
    donc en fait je me demandais s'il n'y avait pas une méthode qui m'éviterai de passer par un nouvel objet File. Une méthode du genre setFileName("String").

  4. #4
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    570
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 570
    Points : 340
    Points
    340
    Par défaut
    Sinon, tu créé ton propre JFileChooser, et tu overwrite la méthode setSelectedFile(File f) pour qu'il ajoute automatiquement l'extension si elle n'est pas présente.

  5. #5
    Membre expérimenté Avatar de Ivelios
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 031
    Points : 1 540
    Points
    1 540
    Par défaut
    Sinon, tu créé ton propre JFileChooser, et tu overwrite la méthode setSelectedFile(File f) pour qu'il ajoute automatiquement l'extension si elle n'est pas présente.
    Je n'y avait pas pensé à celle là.

    D'un avis strictement personnel, je ne me saurais même pas posé ce genre de question, On se dirige vers le perfectionnisme du code. Tant mieux dira ton...
    Mais moi je trouve ton code très jolie actuellement , pourquoi faire compliqué quand on peut faire simple ?

  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,

    Citation Envoyé par Auteur Voir le message
    oui c'est ce que je fais dans le second code que j'ai posté. Mais comme le FileChooser renvoie déjà un objet File via la méthode getSelectedFile, je trouve un peu dommage de créer un nouvel objet File pour pour ajouter l'extension au nom du fichier
    Pourquoi ? Je ne vois pas le problème ???

    a++

  7. #7
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 650
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 143
    Points
    11 143
    Par défaut
    Citation Envoyé par Ivelios Voir le message
    Je n'y avait pas pensé à celle là.

    D'un avis strictement personnel, je ne me saurais même pas posé ce genre de question, On se dirige vers le perfectionnisme du code. Tant mieux dira ton...
    Mais moi je trouve ton code très jolie actuellement , pourquoi faire compliqué quand on peut faire simple ?
    ah donc je me casse la tête pour rien ?

    Citation Envoyé par adiGuba Voir le message
    Salut,


    Pourquoi ? Je ne vois pas le problème ???

    a++

    Je pensais au niveau mémoire... Si j'ouvre 1, 2, 3 fichiers ça passe, mais si j'en ouvre 50, 100 et que chaque fois je fais un new File() je n'alloue pas de la mémoire inutilement ?
    Le ramasse-miettes détruit les objets au fur et à mesure ? Comment ça se passe ?

    En ce qui me concerne, je vérifie l'existence du fichier, s'il n'existe pas je le créé, j'écris les données et je le ferme.
    Si le fichier existe je demande si l'utilisateur veut écraser le fichier ou donner un autre nom.

  8. #8
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    570
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 570
    Points : 340
    Points
    340
    Par défaut
    En changeant ton file, tu vas directement supprimer toutes références vers le File périmé. Or lorsqu'un objet n'a plus aucune référence, au moment o le gc passe, il va libérer la mémoire que l'objet occupait. Donc pas de problème de mémoire dans ton cas.
    Il y' un article assez intéressant sur le fonctionnement du gc en Java sur dev.com si ca t'intéresse.

  9. #9
    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
    Citation Envoyé par Auteur Voir le message
    Je pensais au niveau mémoire... Si j'ouvre 1, 2, 3 fichiers ça passe, mais si j'en ouvre 50, 100 et que chaque fois je fais un new File() je n'alloue pas de la mémoire inutilement ?
    Le ramasse-miettes détruit les objets au fur et à mesure ? Comment ça se passe ?
    L'important c'est surtout de ne pas conserver inutilement des références vers des objets inutiles. Il n'y a donc aucun problème là dedans !


    Si tu veux optimiser la mémoire il est préférable de limiter le scope des références (leurs durées de vie) des varaibles locales ou temporaires :
    • Évites de déclarer toutes les variables au début comme tu le fais, mais uniquement au moment où tu en as besoin, et si possible dans un bloc réduit.
    • Utilises bien tes variables pour ce qu'elles sont : un attribut d'instance ne doit pas être utilisé pour stocker une variable locale, etc.



    Au passage il faut penser au try/finally pour la fermeture du RandomAccessFile...

    a++



    En ce qui me concerne, je vérifie l'existence du fichier, s'il n'existe pas je le créé, j'écris les données et je le ferme.
    Si le fichier existe je demande si l'utilisateur veut écraser le fichier ou donner un autre nom.[/QUOTE]

  10. #10
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 650
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 143
    Points
    11 143
    Par défaut
    ok bien merci pour toutes ces informations
    Je vais donc faire comme ceci pour gérer les extensions de fichiers

    Pour try / finally il est vrai que je n'y ai pas pensé, je l'oublie régulièrement dans mes blocs try

    Évites de déclarer toutes les variables au début comme tu le fais, mais uniquement au moment où tu en as besoin, et si possible dans un bloc réduit.
    Une (bonne ou mauvaise ?) habitude que j'ai prise
    Je déteste voir des déclarations de variables au milieu d'une fonction Je perds en visibilité.

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

Discussions similaires

  1. ajouter une extension à des fichiers sans extension
    Par biloux911 dans le forum VB.NET
    Réponses: 2
    Dernier message: 16/12/2010, 11h38
  2. [debutant]ajouter une fichier dans le serveur
    Par Mounr dans le forum ASP
    Réponses: 1
    Dernier message: 09/04/2007, 20h06
  3. [Free Pascal] [Débutant] Ajouter une unité
    Par poupidou dans le forum Free Pascal
    Réponses: 13
    Dernier message: 07/10/2006, 10h28
  4. la fonction pour connaitre une extension de fichier ?
    Par Zen_Fou dans le forum Langage
    Réponses: 6
    Dernier message: 11/05/2006, 16h30
  5. [File][JFileChooser]Ajouter une extension pour "Save as
    Par leminipouce dans le forum AWT/Swing
    Réponses: 10
    Dernier message: 27/01/2006, 15h45

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