Java: чтение изображения из текущего каталога src - PullRequest
0 голосов
/ 12 декабря 2018

Я хотел бы загрузить изображение из моего текущего каталога src, где также находятся файлы классов java .Тем не менее, я всегда получаю 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 Диск / Приват / Программирование / Logo_transparent.png

С уважением и спасибо!

Ответы [ 3 ]

0 голосов
/ 12 декабря 2018

Вы можете попытаться построить абсолютный путь к изображению, например здесь и прочитать его позже.

0 голосов
/ 12 декабря 2018

Если ваши файлы изображений будут упакованы вместе с вашими файлами классов (например, в том же .jar), вам не следует использовать File, а читать его как ресурс:

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

Обратите внимание на '/'перед именем файла.Это означает поиск в корневом пути пути к классам.Если вы укажете без / он будет искать в пакете этого (текущий класс)

this.getClass().getResourceAsStream("Logo_transparent.png")
0 голосов
/ 12 декабря 2018

Я думаю, что это потому, что вы не создали файл. Вы можете создать файл, если он не существует, используя этот код

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");
...