【发布时间】:2012-08-17 23:29:44
【问题描述】:
在我的应用程序中,我尝试使用ImageIO 将BufferedImage 保存到PNG 文件中。该文件是由用户选择的,因此我需要对可能发生的错误做出反应(例如,用户尝试保存在他没有写入权限的位置)。但是我无法捕捉到发生的IOException。
以下代码显示了问题。对于大多数 *nix 系统上的用户来说,尝试保存到“/foo”应该会引发异常,因为他们在根目录中没有写权限。
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!");
}
}
}
但是,异常没有被捕获。输出:
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)
注意FileNotFoundException 是IOException 的子类,所以它应该被捕获。第二个 catch 块也没有帮助:
catch (FileNotFoundException e) {
System.out.println("Caught FileNotFoundException!");
} catch (IOException e) {
System.out.println("Caught IOException!");
}
我做错了什么?
【问题讨论】:
标签: java exception io ioexception filenotfoundexception