web-dev-qa-db-fra.com

Comment sauvegarder un fichier avec JFileChooser?

J'ai une méthode dans mon application appelée "Enregistrer sous" qui enregistre l'image de mon application sur l'ordinateur dans un fichier. J'ai utilisé JFileChooser pour permettre aux utilisateurs de choisir l'emplacement souhaité pour enregistrer le fichier. Le problème est que, à moins que l'utilisateur ne spécifie explicitement le format de fichier, il enregistre le fichier sans extension. Comment puis-je avoir des formats tels que jpg, png dans le menu déroulant Type de fichier.

et comment puis-je obtenir une extension à partir du menu déroulant Type de fichier pour enregistrer mon fichier image.

 ImageIO.write(image,extension,file);
13
Lokesh Kumar

Enfin, je résous mon propre problème: -

JFileChooser FC=new JFileChooser("C:/");
FC.addChoosableFileFilter(new jpgSaveFilter());
FC.addChoosableFileFilter(new jpegSaveFilter());
FC.addChoosableFileFilter(new PngSaveFilter());
FC.addChoosableFileFilter(new gifSaveFilter());
FC.addChoosableFileFilter(new BMPSaveFilter());
FC.addChoosableFileFilter(new wbmpSaveFilter()); 

int retrival=m_fileChooser_save.showSaveDialog(null);

if (retrival == m_fileChooser_save.APPROVE_OPTION) 
   {

        String ext="";

        String extension=m_fileChooser_save.getFileFilter().getDescription();

       if(extension.equals("*.jpg,*.JPG"))
      { 
          ext=".jpg";
      }
      if(extension.equals("*.png,*.PNG"))
      { 
          ext=".png";
      }
      if(Extension.equals("*.gif,*.GIF"))
      { 
          ext=".gif";
      }
      if(extension.equals("*.wbmp,*.WBMP"))
      { 
          ext=".wbmp";
      }
      if(Extension.equals("*.jpeg,*.JPEG"))
      { 
          EXT=".jpeg";
      }
      if(extension.equals("*.bmp,*.BMP"))
      { 
          ext=".bmp";
      }

Exemple de filtre:

 import Java.io.*;
 import Java.io.File;
 import Java.util.*;
 import javax.swing.filechooser.FileFilter;   
 class jpgSaveFilter extends FileFilter
 { 
    public boolean accept(File f)
   {
        if (f.isDirectory())
          {
            return false;
          }

         String s = f.getName();

        return s.endsWith(".jpg")||s.endsWith(".JPG");
   }

   public String getDescription() 
  {
       return "*.jpg,*.JPG";
  }

}
16
Lokesh Kumar

Préparez les filtres du sélecteur de fichier:

    jFileChooser.addChoosableFileFilter(new FileNameExtensionFilter("File X (.xxx)", "xxx"));
    jFileChooser.addChoosableFileFilter(new FileNameExtensionFilter("File Y (.yyy)", "yyy"));
    jFileChooser.addChoosableFileFilter(new FileNameExtensionFilter("File Z (.zzz)", "zzz"));

    // set default type
    jFileChooser.setFileFilter(jFileChooser.getChoosableFileFilters()[0]);

    // set default file
    jFileChooser().setSelectedFile(defaultFile);

Après validation validation

//Add extension to Selected file 
File file = new File(jFileChooser().getSelectedFile().getCanonicalPath() + "." + ((FileNameExtensionFilter) jFileChooser().getFileFilter()).getExtensions()[0]);

Peut-être une bonne idée de valider si le fichier sélectionné est fourni avec une extension.

2
Daniel De León
1
Pierre

Je pense avoir une meilleure solution. Expliquera cela avec des exemples de fragments de code.

Voici comment définir le filtre de fichier:
jFileChooser.setFileFilter(new FileNameExtensionFilter(".txt", "txt"));.

Après cela, la ligne de sauvegarde principale:
textArea1.write(new BufferedWriter(new FileWriter(jFileChooser.getSelectedFile().getAbsolutePath() + jFileChooser.getFileFilter().getDescription().replace("All Files", ""))));.

Bien entendu, le plus important est ce fragment: jFileChooser.getSelectedFile().getAbsolutePath() + jFileChooser.getFileFilter().getDescription().replace("All Files", "").

La seule chose que je n'aime pas, c'est que je ne pouvais trouver aucune méthode comme 'getExtension', ce qui signifie que vous ne pouvez avoir aucune description de Nice sans problèmes inutiles avec des chaînes.


Ok, j'ai compris. Vous pouvez faire quelque chose comme ça: jFileChooser.getFileFilter().toString().replaceFirst(".*extensions=\\[(.*)]]", ".$1").replaceFirst(".*AcceptAllFileFilter.*", "").

Malheureusement, ce n'est pas si beau, mais semble fonctionner comme un charme.

0
kcpr