Domanda

Ho un metodo nella mia applicazione chiamata "Salva con nome" che salva l'immagine della mia applicazione sul computer la mia in un file. Ho usato il JFileChooser di lasciare che gli utenti di scegliere la loro posizione desiderata per il salvataggio del file. Il problema è meno che l'utente in modo esplicito i tipi nel formato di file, salva il file senza estensione. Come posso avere formati come JPG, PNG nel tipo di file menu a discesa.

e, come posso ottenere l'estensione dal menu Tipo di file per salvare il mio file di immagine.

 ImageIO.write(image,extension,file);
È stato utile?

Soluzione

Infine, ho risolto il mio problema: -

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

Esempio Filtro:

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

}

Altri suggerimenti

Preparare i filtri di selezione dei file:

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

Dopo l'approvazione convalida

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

Potrebbe essere una buona idea convalidare se il file selezionato vengono con estensione.

Credo di aver trovato una soluzione migliore. Spiegherà con frammenti di codice di esempio.

Questo è come ho impostato filtro di file:
jFileChooser.setFileFilter(new FileNameExtensionFilter(".txt", "txt"));.

Dopo questa la linea principale di risparmio:
textArea1.write(new BufferedWriter(new FileWriter(jFileChooser.getSelectedFile().getAbsolutePath() + jFileChooser.getFileFilter().getDescription().replace("All Files", ""))));.

Naturalmente il più importante è questo frammento:. jFileChooser.getSelectedFile().getAbsolutePath() + jFileChooser.getFileFilter().getDescription().replace("All Files", "")

L'unica cosa che non mi piace è che non riuscivo a trovare alcun metodo come 'GetExtension' il che significa che non è possibile avere alcun bella descrizione senza problemi inutili con le stringhe.


Ok, capito. Si può fare qualcosa di simile: jFileChooser.getFileFilter().toString().replaceFirst(".*extensions=\\[(.*)]]", ".$1").replaceFirst(".*AcceptAllFileFilter.*", "").

Purtroppo non è così bello, ma sembra funzionare come un fascino.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top