2012-05-06 9 views
7

Estoy tratando de guardar una imagen usando un JFileChooser. Solo quiero que el usuario pueda guardar la imagen como un jpg. Sin embargo, si no escriben .jpg, no se guardará como una imagen. ¿Es posible agregar de alguna manera ".jpg" al final del archivo?Adjuntando el tipo de archivo a un archivo en Java usando JFileChooser

File file = chooser.getSelectedFile() + ".jpg"; 

No funciona, ya que estoy agregando una cadena a un archivo.

Respuesta

9

¿Por qué no convierte el File en un String y crea un nuevo File cuando termina?

File f = chooser.getSelectedFile(); 
String filePath = f.getAbsolutePath(); 
if(!filePath.endsWith(".jpg")) { 
    f = new File(filePath + ".jpg"); 
} 

Recuerde, usted no necesita agregar la .jpg si ya está allí.

+0

Esta respuesta lo hará. Sin embargo, haga filePath.concat (". Jpg") para evitar una construcción StringBuilder innecesaria. – Justin

+0

@Justin La sobrecarga de crear un nuevo 'StringBuilder' debe ser insignificante ya que solo realiza la acción una vez. – Jeffrey

+0

Gracias Jeffrey :) Tristemente no puedo votar aún. ¿Sabe por qué \t \t \t \t \t se requiere el nombre del formato aquí: ImageIO.write (imagen, "jpg", archivo); no parece hacer una diferencia? Si tiene que tener el formato en el archivo de todos modos? – Kingteeb

1

El mejor enfoque sería comprobar si hay una entrada aceptable. Si no se encuentra uno, reemplace la exención del archivo en lugar de escribir encima.

File f = chooser.getSelectedFile().getAbsolutePath(); 
String path = f.getAbsolutePath(); 
if (!path.matches(".*\\.(jpg|jpeg)")) { 
    // If the extension isn't there. We need to replace it 
    path = path.substring(0, path.lastIndexOf(".") + 1).concat("jpg"); 
    f = new File(path); 
} 
+1

Una buena solución para cubrir todas las extensiones con un 'if', pero necesita agregar' (? I) 'para que no distinga entre mayúsculas y minúsculas (capture JPG y jpg):' if (! Path.matches ("(? i). * \\. (jpg | jpeg) "))'.También es necesario tener en cuenta el caso en el que el nombre del archivo seleccionado (o tipeado) no tiene una extensión, donde 'path.lastIndexOf (". ")' Devuelve -1 (por ejemplo, con la entrada 'test', el código lo cambiará a 'jpg', en lugar de' test.jpg'. – chr

+0

convenidos otra cosa que puede hacer es omitir expresiones regulares todos juntos si quieres velocidad. – Justin

+0

el código está a punto de leer o escribir en el disco, la expresión regular se palidecen en comparación con eso. Me gustó la forma en que usaste la expresión regular para capturar todas las extensiones posibles. – chr

4

funciona si lo hace en dos pasos: añadir la extensión de archivo seleccionado, a continuación, crear File objeto con la extensión anexa a la misma.

String withExtension = chooser.getSelectedFile().getAbsolutePath() + ".jpg"; 
File file = new File(withExtension) 

implícito en su pregunta, pero sólo para cubrir todas las bases: necesidad de comprobar si la extensión no está ya allí en primer lugar, por ejemplo:

String withExtension = chooser.getSelectedFile().getAbsolutePath(); 
if(!withExtension.toLowerCase().endsWith(".jpg")) 
    withExtension += ".jpg"; 

[Es posible que desee añadir" .jpeg "al if anterior - es una extensión válida para archivos JPEG]

El código siguiente puede o no funcionar. File tiene un toString() que le permitirá compilar, pero prefiero usar el método anterior, donde puedo controlar el nombre de ruta exacto que obtengo. La documentación toString() para el objeto File me resulta un poco confusa en cuanto a qué devuelve exactamente. En casos como este, prefiero llamar a una función que sé que devuelve lo que necesito con certeza.

File file = new File(chooser.getSelectedFile() + ".jpg"); 
Cuestiones relacionadas