Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Java IO] Nom de fichier

Sujet résolu
    7 avril 2010 à 20:30:40

    Bonsoir,

    Je rencontre actuellement un problème sur lequel j'aurais besoin d'un coup de pouce.
    J'ai une fonction qui me permet d'exporter un JPanel sous forme de fichier JPEG. L'utilisateur est donc invité à choisir un dossier et saisir le nom du fichier à l'aide d'un JFileChooser.
    Mon problème est que si l'utilisateur saisit un nom avec des caractères non autorisés (exemple, le caractère ':' ou '?'), aucune exception ne sera lancée et un fichier va quand même être créé, mais son nom sera tronqué au niveau du caractère interdit. Exemple: si l'utilisateur tape "toto:tata.jpeg", un fichier vide nommé "toto" sera créé.

    Voici mon code:

    try {
                            ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(newImageFile)); // création du fichier
                            ImageIO.write(tamponSauvegarde, "JPG", newImageFile); // tamponSauvegarde contient l'image et newImageFile est l'objet File dans lequel je l'exporte
                            out.close();
                            System.out.println("ok, created file: " + newImageFile.getName());
                        }
                        catch (IOException ee) {
                            JOptionPane.showMessageDialog(null, "File creation impossible: wrong file name?",
                                    null, JOptionPane.ERROR_MESSAGE);
                            exportAsImage.doClick(); // réaffiche le JFileChooser
                        }


    Comment éviter d'avoir ce problème ?


    Merci d'avance! :)
    • Partager sur Facebook
    • Partager sur Twitter
      7 avril 2010 à 20:39:33

      Salut !

      Une idée comme ça, peut-être pas la plus pertinente certes, mais pourquoi ne pas controler le nom du fichier avec une expression regulière avant de faire l'enregistrement ?
      • Partager sur Facebook
      • Partager sur Twitter
        7 avril 2010 à 20:41:53

        Citation : Bogossito

        Salut !

        Une idée comme ça, peut-être pas la plus pertinente certes, mais pourquoi ne pas controler le nom du fichier avec une expression regulière avant de faire l'enregistrement ?



        Parce qu'il me faudrait considérer chaque caractère interdit et que je ne les connais pas tous...
        • Partager sur Facebook
        • Partager sur Twitter
          7 avril 2010 à 20:48:02

          Citation : zzzer

          Parce qu'il me faudrait considérer chaque caractère interdit et que je ne les connais pas tous...


          Pas nécessairement
          Tu peux juste mettre les caractéres non interdits (par exemple les chiffres, lettre et _)
          • Partager sur Facebook
          • Partager sur Twitter
            7 avril 2010 à 20:51:26

            Citation


            Parce qu'il me faudrait considérer chaque caractère interdit et que je ne les connais pas tous...



            Heu mdr, tu connais google ???

            en deux minute j'ai trouver ça :

            caractère interdit

            Donc bon ... :-°

            Sinon dans ce sujet il parle a prioris du même problème que toi, et le type transforme les char indesirable du String, une autre solution possible.

            Citation


            Pas nécessairement
            Tu peux juste mettre les caractéres non interdits (par exemple les chiffres, lettre et _)



            Une autre solution aussi ;)

            Bon courage pour la suite
            • Partager sur Facebook
            • Partager sur Twitter
              7 avril 2010 à 21:04:44

              Ok, j'ai développé une petite fonction testant chaque caractère de la String pour savoir s'il s'agit d'un des caractères interdits.
              J'aurais préféré une solution un peu moins moche mais c'est mieux que rien :)

              Voici mon code pour ceux que ça pourrait intéresser :

              public boolean isThisStringValid(String s)
                  {
                      for (int i=0 ; i<s.length() ; i++)
                      {
                          if (s.charAt(i) == '/' || s.charAt(i) == '\\' ||
                              s.charAt(i) == ':' || s.charAt(i) == '*' ||
                              s.charAt(i) == '?' || s.charAt(i) == '"' ||
                              s.charAt(i) == '<' || s.charAt(i) == '>' ||
                              s.charAt(i) == '|')
                              return false;
                      }
                      if (s.startsWith("con."))
                              return false;
                      return true;
                  }




              Merci à vous! :)
              • Partager sur Facebook
              • Partager sur Twitter

              [Java IO] Nom de fichier

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown