Как сохранить файл с помощью JFileChooser? - PullRequest
13 голосов
/ 28 марта 2010

В моем приложении есть метод «Сохранить как», который сохраняет изображение моего приложения на компьютере в файл. Я использовал JFileChooser, чтобы позволить пользователям выбирать желаемое местоположение для сохранения файла. Проблема в том, что если пользователь явно не введет формат файла, он сохранит файл без расширения. Как я могу иметь форматы, такие как JPG, PNG в раскрывающемся меню Тип файла.

и как я могу получить расширение из выпадающего меню Тип файла для сохранения моего файла изображения.

 ImageIO.write(image,extension,file);

Ответы [ 4 ]

16 голосов
/ 28 марта 2010

Наконец, я решаю свою собственную проблему: -

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

}
2 голосов
/ 22 мая 2013

Подготовьте фильтры выбора файлов:

    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 голос
/ 28 марта 2010

Используйте пример JFileChoose.SetFileFilter: http://www.java2s.com/Code/JavaAPI/javax.swing/JFileChoosersetFileFilterFileFilterfilter.htm

0 голосов
/ 31 августа 2014

Я думаю, что получил лучшее решение. Объясню это примерами фрагментов кода.

Вот как я устанавливаю фильтр файлов:
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.*", "").

К сожалению, это не так красиво, но, кажется, работает как шарм.

...