linux运行java项目的jar包,获取Resources下资源文件路径(支付宝的公钥证书填路径问题)。

发现把代码打成jar包之后,放在linux环境上运行,是无法通过路径去读取文件的。
一个解决方案就是把相对路径的资源读出流,生成一个文件放在linux环境上(多服务器的情况,不需要自己手动放文件上去),这样就能读文件路径了。

文件在项目里面放的位置:

 

代码如下:

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.springframework.core.io.ClassPathResource;

import java.io.File;
import java.io.InputStream;

/**
 * @Author ckl
 * @Date 2022-09-24 16:41
 */
@Slf4j
public class FileUtil {
    /**
     * linux下运行jar,通过路径获取文件的绝对路径
     * @param path  传相对路径 比如 cert/alipay/xxx.crt
     * @return  返回的路径就是放在linux服务器上的文件路径
     */
    public static String getFileAbsolutePath(String path){
        try {
            // 创建临时文件,获取jar里面的配置文件
            File file = new File("/home/file/" + path);
            if(file.exists()){
                return file.getAbsolutePath();
            }
            InputStream inputStream = null;
            try {
                ClassPathResource resource = new ClassPathResource(path);
                inputStream = resource.getInputStream();
                FileUtils.copyInputStreamToFile(inputStream, file);
                return file.getAbsolutePath();
            } finally {
                IOUtils.closeQuietly(inputStream);
            }
        } catch (Exception e) {
            log.error("FileUtil getFilePath Fail cause by:",e);
        }
        return null;
    }
}


版权声明:本文为qq_35006986原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。