通过 BufferedImage 从文件路径加载图像

我在使用Java应用程序时遇到问题,特别是在从计算机中的某个位置加载图像时。

这篇文章之后,我使用a和a在我的计算机上加载图像。首先,我将图像()放入源代码中,这是有效的。但是,如果我把图像放到另一个地方(比方说),Java IDE会给我一个BufferedImageInputFileStreampic2.jpgC:\\ImageTest\pic2.jpgIllegalArgumentException

return ImageIO.read(in);

这是代码:

public class MiddlePanel extends JPanel {
    private BufferedImage img;

    public MiddlePanel(int width) {    
        //img = getImage("pic2.jpg");       
        img = getImage("C:\\ImageTest\\pic2.jpg");

        this.setPreferredSize(new Dimension(800,460));

    }

    public void paintComponent(Graphics g) {
        // ...
    }

    private BufferedImage getImage(String filename) {
        // This time, you can use an InputStream to load
        try {
            // Grab the InputStream for the image.                    
            InputStream in = getClass().getResourceAsStream(filename);

            // Then read it.
            return ImageIO.read(in);
        } catch (IOException e) {
            System.out.println("The image was not loaded.");
            //System.exit(1);
        }

        return null;
    }
}

答案 1

要从非相对路径读取.jpg文件,您可以使用以下命令:

BufferedImage img = null;

try 
{
    img = ImageIO.read(new File("C:/ImageTest/pic2.jpg")); // eventually C:\\ImageTest\\pic2.jpg
} 
catch (IOException e) 
{
    e.printStackTrace();
}

我目前没有任何Java环境,所以希望它能正常工作并且编写正确。


答案 2

getResource & getResourceAsStream不适用于文件路径,而是相对于代码库的路径。如果代码库是将定位资源的相对路径为 。C:/ImageTest/pic2.jpg

..加载文件 by 和 之间的区别?FileInputStreamgetResourceAsStream

一个主要区别是,will 使用 Jar 中的资源,该资源不再是 .因此,不能用于访问此类资源。getResource..FileFileInputStream


推荐