我的应用程序中有一个名为“另存为”的方法,它将我的应用程序在计算机上的图像保存到文件中。我使用 JFileChooser 让用户选择他们想要的位置来保存文件。问题是除非用户明确键入文件格式,否则它会保存没有扩展名的文件。如何在“文件类型”下拉菜单中设置 jpg、png 等格式。
并且,如何从文件类型下拉菜单中获取扩展名以保存我的图像文件。
ImageIO.write(image,extension,file);
我的应用程序中有一个名为“另存为”的方法,它将我的应用程序在计算机上的图像保存到文件中。我使用 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 retrieval = fc.showSaveDialog(null);
if (retrieval == JFileChooser.APPROVE_OPTION) {
String ext = "";
String extension = fc.getFileFilter().getDescription();
if (extension.equals("*.jpg,*.JPG")) {
ext = ".jpg";
} else if (extension.equals("*.png,*.PNG")) {
ext = ".png";
} else if (extension.equals("*.gif,*.GIF")) {
ext = ".gif";
} else if (extension.equals("*.wbmp,*.WBMP")) {
ext = ".wbmp";
} else if (extension.equals("*.jpeg,*.JPEG")) {
ext = ".jpeg";
} else if (extension.equals("*.bmp,*.BMP")) {
ext = ".bmp";
}
}
示例过滤器:
package example
import java.io.File;
import javax.swing.filechooser.FileFilter;
class JPGSaveFilter extends FileFilter {
@Override
public boolean accept(File f) {
if (f.isDirectory()) {
return false;
}
String s = f.getName().toLowerCase();
return s.endsWith(".jpg");
}
@Override
public String getDescription() {
return "*.jpg,*.JPG";
}
}
准备文件选择器过滤器:
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]);
验证所选文件是否带有扩展名可能是个好主意。
使用 JFileChoose.SetFileFilter 示例:http ://www.java2s.com/Code/JavaAPI/javax.swing/JFileChoosersetFileFilterFileFilterfilter.htm
我想我得到了更好的解决方案。将通过示例代码片段进行解释。
这就是我设置文件过滤器的方式:
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.*", "")
.
不幸的是,它不是那么漂亮,但似乎像一个魅力。