2010-03-27 14 views
13

Uygulamamdaki "Farklı Kaydet" adlı bir uygulamam var. Uygulamamdaki görüntümü bilgisayardaki bir dosyaya kaydeder. Kullanıcıların dosyayı kaydetmek için istedikleri konumu seçmelerine izin vermek için JFileChooser'ı kullandım. Sorun, kullanıcı dosya biçiminde açıkça yazmadıkça, dosyayı uzantısı olmayan bir dosyaya kaydeder. Dosya Türü açılır menüsünde jpg, png gibi biçimlere nasıl sahip olabilirim.JFileChooser kullanarak dosya nasıl kaydedilir?

ve resim dosyamı kaydetmek için Dosya Türü açılır menüsünden uzantıyı nasıl alabilirim.

ImageIO.write(image,extension,file); 

cevap

16

, ben kendi sorunu çözmek: -

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

Örnek 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, Dosya Türü açılır menüsünü gösterir. ama almak veya Uzatma seçilen kullanım seçilen dosyayı aldıktan sonra –

+0

, bu (file.getName(): String ext = file.getName(). Altkatarıyla kadar kolay olmalı .. Bu Dosya Türü Bırak Menüsü oluşturmak üzere nasıl. LastIndexOf ("")); –

+1

Bu oldukça çılgın bir URL ... her biri "java", "dosya" ve "filtre" içerir. – ArtOfWarfare

2

dosya seçici filtreleri hazırlayın:

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

sonra seçili dosya uzantısı ile geliyorsa iyi bir fikir doğrulamak olabilir doğrulama

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

onaylamak.

+1

Sadece şunu söyleyebilir miyim, LOD ilkeleri bu cevapta pencereden dışarı çıkıyor. –

+0

OMG LOD, yine! Üzgünüm, ben değildim, ben bununla ilgilenen başka bir adamım. –

0

Daha iyi bir çözüm buldum. Örnek kod parçaları ile açıklar.

Dosya filtresini şu şekilde ayarladım:
jFileChooser.setFileFilter(new FileNameExtensionFilter(".txt", "txt"));. Bu ana kaydetme çizgisinden sonra:
textArea1.write(new BufferedWriter(new FileWriter(jFileChooser.getSelectedFile().getAbsolutePath() + jFileChooser.getFileFilter().getDescription().replace("All Files", ""))));.

Tabii ki en önemlisi bu parçadır: jFileChooser.getSelectedFile().getAbsolutePath() + jFileChooser.getFileFilter().getDescription().replace("All Files", "").

Sevmediğim tek şey sen dizeleri ile gereksiz sorun olmadan herhangi bir güzel bir açıklama olamaz anlamına gelir 'getExtension' gibi herhangi bir yöntem bulamadık olmasıdır.


Tamam, anladım. Böyle bir şey yapabilirsiniz: jFileChooser.getFileFilter().toString().replaceFirst(".*extensions=\\[(.*)]]", ".$1").replaceFirst(".*AcceptAllFileFilter.*", "").

Maalesef bu kadar güzel değil, ama çekicilik gibi çalışıyor gibi görünüyor.