2010-03-27 7 views
13

J'ai une méthode dans mon application appelée "Enregistrer sous" qui enregistre l'image de mon application sur mon ordinateur dans un fichier. J'ai utilisé JFileChooser pour laisser les utilisateurs choisir l'emplacement souhaité pour l'enregistrement du fichier. Le problème est que si l'utilisateur tape explicitement dans le format de fichier, il enregistre le fichier sans extension. Comment puis-je avoir des formats comme jpg, png dans le menu déroulant Type de fichier. Et, comment puis-je obtenir l'extension à partir du menu déroulant Type de fichier pour enregistrer mon fichier image.Comment enregistrer un fichier en utilisant JFileChooser?

ImageIO.write(image,extension,file); 

Répondre

16

Enfin, je résoudre mon 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 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"; 
    } 

} 
1
+0

ok .. setFileFilter affiche le menu déroulant Extension dans le type de fichier. mais comment récupérer ou utiliser l'extension sélectionnée à partir de ce menu déroulant de type de fichier .. –

+0

Une fois que vous avez le fichier sélectionné, il devrait être aussi facile que String ext = file.getName(). Substring (file.getName(). LastIndexOf (".")); –

+1

C'est une URL assez folle ... elle contient "java", "file" et "filter" trois fois chacun. – ArtOfWarfare

2

Préparer les filtres fichier chooser:

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 approuve

//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é avec l'extension venir.

+1

Puis-je juste dire, les principes de la LDV sortent par la fenêtre dans cette réponse. –

+0

OMG LOD, encore une fois! Désolé, ce n'était pas moi, juste un autre gars qui fait face à ça. –

0

Je pense que j'ai une meilleure solution. Expliquera avec des exemples de fragments de code.

Voici comment je définis le filtre de fichiers:
jFileChooser.setFileFilter(new FileNameExtensionFilter(".txt", "txt"));. Ensuite, la principale ligne d'économie:
textArea1.write(new BufferedWriter(new FileWriter(jFileChooser.getSelectedFile().getAbsolutePath() + jFileChooser.getFileFilter().getDescription().replace("All Files", ""))));.

Bien sûr, 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 n'ai pas trouvé de méthode comme 'getExtension', ce qui signifie que vous ne pouvez pas avoir une bonne description sans problèmes inutiles avec les chaînes.


Ok, c'est 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.

Questions connexes