2010-03-27 23 views
13

Ich habe eine Methode in meiner Anwendung namens "Speichern unter", die das Bild meiner Anwendung auf dem Computer in einer Datei speichert. Ich habe den JFileChooser verwendet, damit die Benutzer ihren gewünschten Speicherort für die Datei auswählen können. Das Problem ist, wenn Benutzer nicht explizit das Dateiformat eingibt, speichert es die Datei ohne Erweiterung. Wie kann ich Formate wie jpg, png im Dropdown-Menü Dateityp haben.Wie speichere ich eine Datei mit JFileChooser?

und, wie bekomme ich eine Erweiterung aus dem Dropdown-Menü Dateityp zum Speichern meiner Bilddatei.

ImageIO.write(image,extension,file); 

Antwort

16

Schließlich löse ich mein eigenes Problem: -

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

Beispiel 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 zeigt das Dropdown-Menü Erweiterung im Dateityp an. aber wie Sie ausgewählte Erweiterung von diesem Dateityp Drop-Menü abrufen oder verwenden .. –

+0

Sobald Sie die ausgewählte Datei haben, sollte es so einfach sein wie String ext = file.getName(). Substring (file.getName(). LastIndexOf (".")); –

+1

Das ist eine ziemlich verrückte URL ... sie enthält dreimal "java", "file" und "filter". – ArtOfWarfare

2

der Filter Dateiauswahl vorbereiten:

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

Nach genehmigen Validierung

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

Könnte eine gute Idee, überprüfen, ob die ausgewählte Datei mit der Erweiterung kommen.

+1

Kann ich einfach sagen, dass die LOD-Prinzipien in dieser Antwort aus dem Fenster verschwinden. –

+0

OMG LOD, wieder! Entschuldigung, ich war es nicht, ich war nur ein anderer Typ, der damit konfrontiert wurde. –

0

Ich denke, ich habe bessere Lösung. Wird es mit Beispielcodefragmenten erklären.

So stelle ich den Dateifilter ein:
jFileChooser.setFileFilter(new FileNameExtensionFilter(".txt", "txt"));.

Danach die Hauptsparfunktion:
textArea1.write(new BufferedWriter(new FileWriter(jFileChooser.getSelectedFile().getAbsolutePath() + jFileChooser.getFileFilter().getDescription().replace("All Files", ""))));.

Natürlich ist das wichtigste dieses Fragment: jFileChooser.getSelectedFile().getAbsolutePath() + jFileChooser.getFileFilter().getDescription().replace("All Files", "").

Das einzige, was ich nicht mag ist, dass ich keine Methode wie 'getExtension' finden konnte, was bedeutet, dass Sie keine schöne Beschreibung ohne unnötige Probleme mit Strings haben können.


Ok, hab es. Sie können so etwas tun: jFileChooser.getFileFilter().toString().replaceFirst(".*extensions=\\[(.*)]]", ".$1").replaceFirst(".*AcceptAllFileFilter.*", "").

Leider ist es nicht so schön, aber scheint wie ein Charme zu arbeiten.

Verwandte Themen