发现把代码打成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版权协议,转载请附上原文出处链接和本声明。