如何使用JFileChooser保存文件?

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

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

ImageIO.write(image,extension,file); 

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

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

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

准备文件选择器filter:

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

批准validation后

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

可能是一个好主意validation所选文件是否带有扩展名。

使用JFileChoose.SetFileFilter示例: http : //www.java2s.com/Code/JavaAPI/javax.swing/JFileChoosersetFileFilterFileFilterfilter.htm

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

这是我设置文件filter的方式:
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.*", "")

不幸的是,它不是那么美丽,但似乎就像一个魅力。