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

Lup*_*Lup 10 java bufferedimage image embedded-resource

我的Java应用程序有问题,特别是从我的计算机中的某个位置加载图像.

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

return ImageIO.read(in);
Run Code Online (Sandbox Code Playgroud)

这是代码:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

Taf*_*ari 13

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

BufferedImage img = null;

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

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


And*_*son 5

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

通过加载文件之间..difference FileInputStreamgetResourceAsStream

一个主要的区别是,getResource..它将使用Jar中的资源,而不再是一个File.因此FileInputStream 不能用于访问这样的资源.