2010-03-27 71 views
13

Tengo un método en mi aplicación llamado "Guardar como" que guarda la imagen de mi aplicación en mi computadora en un archivo. Utilicé el JFileChooser para permitir que los usuarios elijan la ubicación deseada para guardar el archivo. El problema es que a menos que el usuario escriba explícitamente el formato de archivo, guarda el archivo sin extensión. ¿Cómo puedo tener formatos como jpg, png en el menú desplegable Tipo de archivo?¿Cómo guardar el archivo usando JFileChooser?

y, ¿cómo puedo obtener la extensión desde el menú desplegable Tipo de archivo para guardar mi archivo de imagen.

ImageIO.write(image,extension,file); 

Respuesta

16

Por último, resuelvo mi 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"; 
     } 

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

} 
1
+0

ok .. setFileFilter mostrará la extensión en el menú desplegable Tipo de archivo. pero cómo recuperar o usar la extensión seleccionada de este menú de Tipo de archivo. –

+0

Una vez que tenga el archivo seleccionado, debería ser tan fácil como String ext = file.getName(). Substring (file.getName(). LastIndexOf (".")); –

+1

Esa es una URL bastante loca ... contiene "java", "archivo" y "filtro" tres veces cada uno. – ArtOfWarfare

2

Preparar los filtros de selección de archivos:

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

Después de aprobar la validación

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

Podría ser una buena idea de validar si el archivo seleccionado vienen con extensión.

+1

¿Puedo decir que los principios de LOD salen por la ventana en esta respuesta? –

+0

OMG LOD, otra vez! Lo siento, no fui yo, solo otro chico que enfrenta esto. –

0

Creo que obtuve una mejor solución. Lo explicará con fragmentos de código de muestra.

Así es como configuré el filtro de archivos:
jFileChooser.setFileFilter(new FileNameExtensionFilter(".txt", "txt"));.

Después de esto, la línea de guardado principal:
textArea1.write(new BufferedWriter(new FileWriter(jFileChooser.getSelectedFile().getAbsolutePath() + jFileChooser.getFileFilter().getDescription().replace("All Files", ""))));.

Por supuesto, el más importante es este fragmento: jFileChooser.getSelectedFile().getAbsolutePath() + jFileChooser.getFileFilter().getDescription().replace("All Files", "").

Lo único que no me gusta es que no pude encontrar ningún método como 'getExtension', lo que significa que no puedes tener ninguna buena descripción sin problemas innecesarios con las cadenas.


Ok, lo conseguí. Puede hacer algo como eso: jFileChooser.getFileFilter().toString().replaceFirst(".*extensions=\\[(.*)]]", ".$1").replaceFirst(".*AcceptAllFileFilter.*", "").

Desafortunadamente no es tan hermoso, pero parece funcionar como un amuleto.

Cuestiones relacionadas