En mi aplicación, estaba intentando guardar un archivo BufferedImage
en un archivo PNG utilizando ImageIO
. El archivo es elegido por el usuario, por lo que debo reaccionar a los errores que puedan ocurrir (por ejemplo, el usuario intenta guardar en una ubicación para la que no tiene permiso de escritura). Sin embargo, no puedo ver el IOException
que ocurre.Java ImageIO: Exception Weirdness
El siguiente código muestra el problema. Intentar guardar en "/ foo" debería arrojar una excepción para la mayoría de los usuarios en los sistemas * nix, ya que no tienen permiso de escritura en el directorio raíz.
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class IOTest {
public static void main(String[] args) {
BufferedImage img = new BufferedImage(640, 480,
BufferedImage.TYPE_INT_RGB);
try {
File f = new File("/foo");
ImageIO.write(img, "png", f);
} catch (IOException e) {
System.out.println("Caught IOException!");
}
}
}
Sin embargo, la excepción no se detecta. Salida:
java.io.FileNotFoundException: /foo (Permission denied)
at java.io.RandomAccessFile.open(Native Method)
at java.io.RandomAccessFile.<init>(RandomAccessFile.java:233)
at javax.imageio.stream.FileImageOutputStream.<init>(FileImageOutputStream.java:69)
at com.sun.imageio.spi.FileImageOutputStreamSpi.createOutputStreamInstance(FileImageOutputStreamSpi.java:55)
at javax.imageio.ImageIO.createImageOutputStream(ImageIO.java:419)
at javax.imageio.ImageIO.write(ImageIO.java:1530)
at IOTest.main(IOTest.java:16)
Exception in thread "main" java.lang.NullPointerException
at javax.imageio.ImageIO.write(ImageIO.java:1538)
at IOTest.main(IOTest.java:16)
Tenga en cuenta que FileNotFoundException
es una subclase de IOException
por lo que debe quedar atrapado. Un segundo bloque catch tampoco ayudó:
catch (FileNotFoundException e) {
System.out.println("Caught FileNotFoundException!");
} catch (IOException e) {
System.out.println("Caught IOException!");
}
¿Qué estoy haciendo mal?
No hay "causado por" para justificar su conclusión. –