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因此上述的方法不作測試,先記錄下來


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM