【问题标题】:Java: Read image from current src directoryJava:从当前 src 目录读取图像
【发布时间】:2018-12-12 10:54:50
【问题描述】:

我想从 java 类文件所在的当前 src 目录加载图像。但是,我总是收到 IOException..

我如何确保文件在 Mac/Linux 以及 Windows 上正确加载?

到目前为止我的代码:

String dir = System.getProperty("user.dir") + "/Logo_transparent.png";
File imageFile = new File(dir);
BufferedImage bufferedImage = null;

try {
    bufferedImage = ImageIO.read(imageFile);
} catch (IOException e) {
    System.out.println(e.getMessage());
    System.out.println(dir);
    System.out.println();
}

IOException 消息:

无法读取输入文件!

(我的路径是正确的 - 是因为 Google 和 Drive 之间的空间吗?)

/Users/myMac/Google Drive/Privat/Programming/Logo_transparent.png

诚挚的问候,谢谢!

【问题讨论】:

  • 你确定那是正确的路径吗?
  • 是的,我是! - 有没有办法测试它?
  • 你能不能 System.out.println(dir); 告诉我们它返回了什么
  • 返回的是:“/Users/myMac/Google Drive/Privat/Programming”
  • @Jan,这个问题似乎是不正确的:你是说你想从 src 目录中获取这个图像,但是将我们引向/Users/myMac/Google Drive/Privat/Programming/Logo_transparent.png。明确你到底想做什么?

标签: java image bufferedreader filereader bufferedimage


【解决方案1】:

我认为是因为你没有创建文件,如果文件不存在,你可以使用这段代码创建文件

if(!imageFile.exists()) imageFile.createNewFile();

你的代码看起来像这样

String dir = System.getProperty("user.dir") + "/Logo_transparent.png";
File imageFile = new File(dir);
BufferedImage bufferedImage = null;
try {
    if(!imageFile.exists()) imageFile.createNewFile();
    bufferedImage = ImageIO.read(imageFile);
} catch (IOException e) {
    System.out.println(e.getMessage());
    System.out.println(dir);
    System.out.println();
}

您也不应该像这样连接子文件,而是将其作为第二个参数传递。

File imageFile = new File(System.getProperty("user.dir"), "Logo_transparent.png");

【讨论】:

  • 它存在,我可以在我的Finder中看到它!
  • 你还能运行下面的代码,看看它是否仍然显示错误?
  • @SamzSakerz,逻辑不正确,您正在检查文件是否存在,您将重新创建它。你忘了否定
  • @SergeyProkofiev 抱歉,我已经 50 多个小时没有睡觉了
  • @SamzSakerz 为什么你会尝试从新创建的空文件中读取图像?
【解决方案2】:

如果您的图像文件将与您的类文件一起打包(例如在同一个 .jar 中),则不应使用 File 而是将其作为资源读取:

bufferedImage = ImageIO.read(this.getClass().getResourceAsStream("/Logo_transparent.png"));

注意文件名前的“/”。这意味着在类路径的根路径中搜索。 如果指定不带 / 则会在这个(当前类)的包中搜索

this.getClass().getResourceAsStream("Logo_transparent.png")

【讨论】:

    【解决方案3】:

    您可以尝试构建图像的绝对路径,例如here,然后再阅读。

    【讨论】:

    • 这不是问题所在。阅读标题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-24
    • 1970-01-01
    • 2014-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多