2010-03-27 95 views
13

我在我的应用程序中有一个名为“另存为”的方法,将我的应用程序在计算机上的图像保存到文件中。 我使用JFileChooser让用户选择他们想要保存文件的位置。 问题是,除非用户明确键入文件格式,否则不保存文件的扩展名。 如何在“文件类型”下拉菜单中使用jpg,png等格式。如何使用JFileChooser保存文件?

和,我怎样才能从文件类型下拉菜单中保存我的图像文件的扩展名。

ImageIO.write(image,extension,file); 

回答

16

最后,我解决我自己的问题: -

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

例筛选:

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将显示文件类型下拉菜单中的扩展名。 但如何检索或使用选定的扩展形式此文件类型下拉菜单.. – 2010-03-27 22:24:32

+0

一旦你有选定的文件,它应该像字符串ext = file.getName()。substring(file.getName()。lastIndexOf ( “”)); – 2010-03-28 00:35:10

+1

这是一个非常疯狂的URL ......它包含三个“java”,“file”和“filter”。 – ArtOfWarfare 2012-11-29 16:03:56

2

准备文件选择过滤器:

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

批准验证

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

后可能是一个不错的主意验证,如果所选择的文件来与扩展。

+1

我能说,LOD原则在这个答案中出现在窗口。 – 2015-05-07 22:14:53

+0

OMG LOD,再次!对不起,这不是我,我只是另一个面对这个问题的人。 – 2015-05-29 20:04:33

0

我想我得到了更好的解决方案。 将用示例代码片段来解释它。

这是我如何设置文件过滤器:
jFileChooser.setFileFilter(new FileNameExtensionFilter(".txt", "txt"));

此后主保存行:
textArea1.write(new BufferedWriter(new FileWriter(jFileChooser.getSelectedFile().getAbsolutePath() + jFileChooser.getFileFilter().getDescription().replace("All Files", ""))));

当然最重要的是这个片段:jFileChooser.getSelectedFile().getAbsolutePath() + jFileChooser.getFileFilter().getDescription().replace("All Files", "")

我唯一不喜欢的是,我找不到像'getExtension'这样的任何方法,这意味着你不能有任何好的描述,没有不必要的麻烦与字符串。


好的,明白了。你可以这样做: jFileChooser.getFileFilter().toString().replaceFirst(".*extensions=\\[(.*)]]", ".$1").replaceFirst(".*AcceptAllFileFilter.*", "")

不幸的是它不是很漂亮,但似乎像一个魅力。