如何使用JFileChooser保存文件?

时间:2010-03-27 21:40:04

标签: java swing bufferedimage jfilechooser filefilter

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

并且,如何从“文件类型”下拉菜单中获取用于保存图像文件的扩展名。

 ImageIO.write(image,extension,file);

4 个答案:

答案 0 :(得分: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 :(得分: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]);

验证所选文件是否附带扩展名可能是一个好主意。

答案 2 :(得分:1)

答案 3 :(得分: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.*", "")

不幸的是,它不是那么美丽,但似乎有点像魅力。