背景
想要在resouces下创建一个临时文件夹,并将临时文件写到这个文件夹中
关于项目中使用临时文件夹的情况
1. 如果想要获取resource目录下的某个文件夹路径:
ResourceUtils.getURL("classpath:").getPath() + "/xxx"
注意:
1.1 不能直接使用ResourceUtils.getURL("classpath:xxx").getPath(),这种会报错,因为文件夹严格来说并不是一个资源,只有文件才算是资源
1.2 如果resource目录下的那个文件夹是一个空文件夹,那么上linux后,无法在其中创建文件,因为打包的时候会忽略空文件夹,即target下不会有对应的文件夹,此时如果想在代码中实时创建这个文件夹又会没有权限
解决方式:在那个临时文件夹下再放个临时文件,这样打包的时候也会自动创建临时文件夹
如果想要获取resource目录下的某个文件
ResourceUtils.getURL("classpath:xxx.txt").getPath()
解决方法:
不在resources下创建临时文件夹了,直接写到系统的临时文件夹下
注意:
hutool的FileUtil.getTmpDir()方法,在linux上获取的临时文件夹路径不正确,谨慎使用
获取临时文件夹时最好判断一下:用的都是hutool工具
/**
* 由于linux上获取临时文件夹时有时会失败,所以手动匹配一下
* @return
*/
public File getTempPath () {
File tmpFile;
try {
OsInfo osInfo = SystemUtil.getOsInfo();
if (osInfo.isLinux()) {
tmpFile = FileUtil.newFile("/tmp");
if (!tmpFile.exists()) {
log.error("linux下无/tmp临时文件夹");
return null;
}
} else {
tmpFile = FileUtil.getTmpDir();
}
log.info("临时文件夹路径: [{}]", tmpFile.getAbsolutePath());
return tmpFile;
} catch (Exception e) {
log.error("创建crm临时文件夹失败", e);
return null;
}
}
关于resource下文件夹或文件的复制,读取文件,可看另外一篇博客:
对接海康sdk-linux下复制jar包中resource目录的文件夹-CSDN博客
对于resource下的文件读取,最好使用ResourceUtil.getStream(),即直接读取流,否则jar包运行时会报错。