2010-03-27 29 views
13

Ho un metodo nella mia applicazione chiamato "Salva come" che salva l'immagine della mia applicazione sul mio computer in un file. Ho usato JFileChooser per consentire agli utenti di scegliere la posizione desiderata per il salvataggio del file. Il problema è che a meno che l'utente non digiti esplicitamente il formato del file, salva il file senza estensione. Come posso avere formati come jpg, png nel menu a discesa Tipo file.Come salvare il file usando JFileChooser?

e, come posso ottenere l'estensione dal menu a discesa Tipo file per il salvataggio del mio file immagine.

ImageIO.write(image,extension,file); 

risposta

16

Infine, ho risolto il mio problema: -

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"; 
     } 

Esempio Filter:

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 mostrerà il menu a discesa Extension in File Type. ma come recuperare o utilizzare il modulo Estensione selezionato questo menu a discesa Tipo file .. –

+0

Una volta ottenuto il file selezionato, dovrebbe essere semplice come String ext = file.getName(). Sottostringa (file.getName(). LastIndexOf ("")); –

+1

Questo è un URL piuttosto folle ... contiene "java", "file" e "filtro" tre volte ciascuno. – ArtOfWarfare

2

Preparare i filtri di selezione dei file:

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); 

Dopo approvare la convalida

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

Potrebbe essere una buona idea convalidare se il file selezionato vengono con estensione.

+1

Posso solo dire che i principi LOD escono dalla finestra in questa risposta. –

+0

OMG LOD, ancora! Scusa, non sono stato io, sono solo un altro ragazzo che sta affrontando questo. –

0

Penso di avere una soluzione migliore. Lo spiegherà con frammenti di codice di esempio.

Ecco come ho impostato il filtro file:
jFileChooser.setFileFilter(new FileNameExtensionFilter(".txt", "txt"));.

Dopo questa riga di salvataggio principale:
textArea1.write(new BufferedWriter(new FileWriter(jFileChooser.getSelectedFile().getAbsolutePath() + jFileChooser.getFileFilter().getDescription().replace("All Files", ""))));.

Naturalmente il più importante è questo frammento: jFileChooser.getSelectedFile().getAbsolutePath() + jFileChooser.getFileFilter().getDescription().replace("All Files", "").

L'unica cosa che non mi piace è che non sono riuscito a trovare alcun metodo come "getExtension", il che significa che non si può avere una descrizione piacevole senza problemi inutili con le stringhe.


Ok, ho capito. Puoi fare qualcosa del genere: jFileChooser.getFileFilter().toString().replaceFirst(".*extensions=\\[(.*)]]", ".$1").replaceFirst(".*AcceptAllFileFilter.*", "").

Sfortunatamente non è così bello, ma sembra funzionare come un fascino.

Problemi correlati