4

这曾经工作,现在它不工作。我没有更改图像应该流式传输的部分,所以我不知道为什么这不起作用。这是我的代码片段:

File f = new File(filepath);
applicantImage=new ImageDetail(filepath);

Iterator<ImageReader> readers =
     ImageIO.getImageReadersBySuffix(applicantImage.getFile_extension());
ImageReader reader = readers.next();

ImageInputStream iis = ImageIO.createImageInputStream(f);

filepath是图像的绝对文件路径,并且确认图像位于服务器上的该位置。一切都很好,花花公子,直到它到达ImageIO.createImageInputStream(f)。它现在正在返回null。我阅读了它包含一个文件的javadoc。那么为什么它现在返回一个null呢?有人知道吗?上面发布的代码在我的编辑中都没有更改,所以我不明白为什么它在更改之前有效,为什么现在无效。任何帮助深表感谢!谢谢!

4

2 回答 2

5

尝试使用InputStream带有File.

ImageIO.createImageInputStream(new FileInputStream(f));

这是一个相关的例子

附录:仔细观察ImageIO.createImageInputStream(),它确实说 aFile是允许的。事实上,您的原始代码在我的平台(Mac OS X)上工作,这让我推测null结果可能是您平台的ImageInputStreamSpi实现所特有的。对于一个不存在的File f,

ImageIO.createImageInputStream(f);

我得到一个合理的例外:

线程“main”java.lang.IllegalStateException 中的异常:未设置输入!
    在 com.sun.imageio.plugins.gif.GIFImageReader.read(GIFImageReader.java:784)
    在 javax.imageio.ImageReader.read(ImageReader.java:923)
    在 cli.GifBounds.search(GifBounds.java:22)
    在 cli.GifBounds.main(GifBounds.java:14)
于 2011-05-12T02:15:04.387 回答
0

您需要在之前设置输入:

reader.setInput(iis);
dimension = new Dimension(reader.getWidth(0), reader.getHeight(0));
System.out.print(dimension);
于 2016-05-31T11:03:30.857 回答