【问题标题】:Java: Reading in an image from same folder as java filesJava:从与 java 文件相同的文件夹中读取图像
【发布时间】:2015-11-28 18:25:30
【问题描述】:

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

picture = new JLabel(new ImageIcon(ImageIO.read(new File("C:\\Users\\...\\ogre.png"))));

图像与 java 文件位于同一文件夹中。但是,当我尝试 "ogre.png"".\\ogre.png" 或类似时,它不起作用。

我的问题是:

  1. 我最终将导出到 JAR,这会影响创建 jar 后的情况吗? (我假设是的,因为创建 jar 不会更改源代码)。

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

【问题讨论】:

  • 您需要设身处地为应用程序的最终用户着想。最终用户所拥有的只是一个包含应用程序的 jar 文件。根本没有java源文件。应用程序应该在哪里读取图像?它们是否应该是属于最终用户的图像,并且位于最终用户的硬盘上?还是应该将它们交付并嵌入到应用程序中?
  • 试试getClass().getResource(...)
  • @JBNizet 图片是预定义的,可能会在 jar 文件中
  • 那么你一定不能使用文件IO来加载它们。您必须使用类加载器从类路径加载它们,就像从文件系统(在开发期间)或从 jar 文件(一旦捆绑)加载类一样。 new ImageIcon(MyClass.class.getResource("/com/mycompany/myapp/images/ogre.png")),假设 png 文件在包中 com.mycompany.myapp.images.

标签: java file-io javax.imageio


【解决方案1】:

这是标准方式...(当所有东西都在罐子里时它会起作用)

URL url = OneOfYourClass.class.getResource("package/pathTo/image/ogre.png");           
ImageIcon image = new ImageIcon(url);

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

package/pathTo/image/ 是从这个类中找到你的图像的路径

【讨论】:

  • 如果图像文件在同一个文件夹中,路径应该是什么?如"ogre.png" 抱歉!习惯用java读取i个文件
  • @Jack Moulson 是的,但我一般建议你开始使用包...
  • 啊,它在一个名为 softdev 的包中,所以路径会变成 "softdev/src/ogre.png"
  • @Jack Moulson 你有一个叫做 src 的包???通常,您的代码位于名为 src 的文件夹中(这是基础)...路径是您用作加载器的类的相对路径..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-03
  • 1970-01-01
  • 2015-02-09
  • 2017-03-06
  • 2012-05-13
相关资源
最近更新 更多