Java:从与Java文件相同的文件夹中读取图像

Java:从与Java文件相同的文件夹中读取图像,java,file-io,javax.imageio,Java,File Io,Javax.imageio,我有一些代码可以从与java文件相同的目录中读取图像文件,但目前我只能在给定entier路径的情况下才能让它工作 picture = new JLabel(new ImageIcon(ImageIO.read(new File("C:\\Users\\...\\ogre.png")))); 该图像与java文件位于同一文件夹中。但是,当我尝试使用“ogre.png”或“\\ogre.png”或类似方法时,它不起作用 我的问题是: 我最终会导出到一个JAR,一旦JAR被创建,这会影响到它吗?(我

我有一些代码可以从与java文件相同的目录中读取图像文件,但目前我只能在给定entier路径的情况下才能让它工作

picture = new JLabel(new ImageIcon(ImageIO.read(new File("C:\\Users\\...\\ogre.png"))));
该图像与java文件位于同一文件夹中。但是,当我尝试使用
“ogre.png”
“\\ogre.png”
或类似方法时,它不起作用

我的问题是:

  • 我最终会导出到一个JAR,一旦JAR被创建,这会影响到它吗?(我假设是的,因为创建jar不会更改源代码)

  • 例如,在移动包含文件夹的情况下,如何从同一文件夹而不是确切的文件路径读取文件


  • 这是标准的方法。。。(当所有东西都在罐子里时,它就会工作)

    OneOfYourClass
    是您拥有的类(可能是主类)


    package/pathTo/image/
    是从此类中找到图像的路径

    您需要设身处地为应用程序的最终用户着想。最终用户只有一个包含应用程序的jar文件。根本没有java源文件。应用程序应该在哪里读取图像?它们应该是最终用户的图像,并且位于最终用户的硬盘上吗?或者它们应该与应用程序一起交付和嵌入?请尝试
    getClass().getResource(…)
    @jbnize如果图像是预定义的,并且可能会在jar文件中,则不能使用文件IO加载它们。您必须使用类加载器从类路径加载它们,就像从文件系统(开发期间)或jar文件(捆绑后)加载类一样
    newimageicon(MyClass.class.getResource(“/com/mycompany/myapp/images/ogre.png”)
    ,假设png文件在包
    com.mycompany.myapp.images
    中。如果图像文件在同一文件夹中,路径是否应该为空?就像在
    “ogre.png”
    对不起!我习惯于用计算机读取i文件java@JackMoulson是的,但我通常会建议您开始使用package…啊,它在一个名为
    softdev
    的包中,因此这将使路径
    “softdev/src/ogre.png”
    ?@Jack Moulson您有一个名为src的包吗???通常,您的代码位于名为src的文件夹中(这是base)。。。路径是作为加载程序使用的类的相对路径。@Jack Moulson如果您有疑问,请将png与用于加载它的类(同一文件夹)放在一起,并按照第一条注释中的指示进行操作
    URL url = OneOfYourClass.class.getResource("package/pathTo/image/ogre.png");           
    ImageIcon image = new ImageIcon(url);