Exception in thread "main" javax.imageio.IIOException: Can't read input file!

 

package com.o2o.util;

import net.coobird.thumbnailator.Thumbnails;
import net.coobird.thumbnailator.geometry.Positions;

import javax.imageio.ImageIO;
import java.io.File;
import java.io.IOException;
import java.net.URLDecoder;

public class ImageUtil {
    public static void main(String[] args) throws IOException {
        //水印图片绝对路径,方法是通过线程运行的,因此可以通过线程逆推到类加载器,从类加载器中获取到资源的路径
        String basePath=Thread.currentThread().getContextClassLoader().getResource("").getPath();
        System.out.println(basePath);
        //可以传入文件也可以传入图片,
        Thumbnails.of(new File("/home/image/background-tela.jpg"))
                //并指定输出图片的大小
                .size(200,200)
                //水印图片
                .watermark(Positions.BOTTOM_RIGHT,
                        //0.25f:透明度
                        ImageIO.read(new File(basePath+"283315.jpg")),0.25f)
                //压缩比
                .outputQuality(0.8f)
                //输出文件
                .toFile("/home/image/background.jpg");

    }
}

最近在做javaweb项目,但是在测试上面的代码时出现了 Exception in thread "main" javax.imageio.IIOException: Can't read input file!

开始时看到这个异常时很是困惑,心想难道路径错了?但是我没有直接输入路径而是通过Thread.currentThread().getContextClassLoader().getResource("").getPath();直接获取的路径,按原理说不应该i出现错误,

于是开始在网上查找资料,找了半天最后在https://blog.csdn.net/pengzhisen123/article/details/89634647这篇博客中找到了灵感,这篇文章的作者是在路径中出现了空格这一特殊字符,因此出现了上述异常,

抱着尝试的态度打印出来了路径发现果然出现了中文乱码,知道原因后,解决方法自然而然的就有了

//解决乱码的方法
basePath= URLDecoder.decode(basePath,"utf-8");

在查找相关资料时,看到了另一种可能出现的情况:

  windows下分隔符得用“ \ ”(basepath打印出来分隔符是" / "),但是然后就basepath = basepath.replace('\',File.separatorChar)

  但是本人使用的是Linux因此上述的方法不作测试,先记录下来

posted @ 2020-04-28 21:46  xing柠檬  阅读(1231)  评论(0编辑  收藏  举报