Как сохранить файл с помощью JFileChooser?
У меня есть метод в моем приложении под названием "сохранить Как", который сохраняет изображение моего приложения на компьютере в файл. Я использовал JFileChooser, чтобы позволить пользователям выбрать нужное место для сохранения файла. Проблема, если пользователь явно не в формате файла, он сохраняет файл без расширения. Как я могу иметь такие форматы, как jpg, png в раскрывающемся меню тип файла.
и, как я могу получить расширение из выпадающего меню типа файла для сохранения моего изображения файл.
ImageIO.write(image,extension,file);
4 ответов
наконец, я решаю свою собственную проблему: -
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";
}
}
подготовьте фильтры выбора файлов:
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=\[(.*)]]", ".").replaceFirst(".*AcceptAllFileFilter.*", "")
.
к сожалению, это не так красиво, но, кажется, работает как шарм.