一些坑 Java 执行命令行命令 Spring Boot 打包为jar ResourceUtils.getFile 等出现的问题
2024-08-31 20:18:09
Java 执行命令行命令
这个没技术含量的东西耗费了我半个多小时
String command = ....;
Process process = Runtime.getRuntime().exec(command);
一个简单的命令这样执行时没问题的,但是如果参数中存在空格,那么就会出问题
会被分割为不同的参数,使用""包含起来也不行
解决方案:
使用重载的方法
String[]command = ....;
Process process = Runtime.getRuntime().exec(command);
Spring Boot 打包为jar 之后出现问题
比如这段代码本地调试没问题,但是打包之后就报错了
File file = ResourceUtils.getFile("classpath:"+cfgpath); 打包变成jar出错
这个文件本身是存在的(jar包中也有),但是运行的时候是在jar中,获取的路径也是在jar包中
这个方法并不推荐,当然如果是使用war包解压到tomcat部署应该是没问题的(还没尝试)
Spring 推荐我们使用 ClassPathResource
来获取,当然使用getFile
的接口仍然是会抛出异常的,但是可以使用 classPathResource.getInputStream();
如果我们之前写的接口类型接收的参数是File怎么办
如果文件不是很大,可以考虑使用以下解决方案,直接复制到临时目录即可:
//获取临时文件目录
String folder = System.getProperty("java.io.tmpdir");
File file = new File(folder + File.separator + cfgpath);
file.createNewFile();
//common-lang3
FileUtils.copyInputStreamToFile(inputStream,file);
或者直接把配置文件放在某个固定目录下,然后配置文件里面手动写一下,但是我如果配置文件更新还要手动把配置文件复制到那个目录
最新文章
- iOS开发-NSDate使用
- 五、CCNode
- 黑马程序员——Objective-c特性
- 创建维护计划时,提示“代理XP”组件已作为此服务器安全配置的一部分被关闭
- IntentFilter
- [POJ] 2785 4 Values whose Sum is 0(双向搜索)
- setSingleChoiceItems和setPositiveButton两者触发时期
- C语言当中的作用域
- caffe的matlab接口一览表
- [leetcode-506-Relative Ranks]
- python介绍篇
- [Swift]LeetCode79. 单词搜索 | Word Search
- java中的绝对路径和相对路径
- 数据库设计,表与表的关系,一对多。One-To-Many(2)
- SQL mysql优化
- Hibernate 的缓存
- 定时器 setInterval(‘function()’, 2000)
- Android之判断时间是否为今天
- hbase 单机+伪分布环境搭建学习-1
- SharePoint2007深入浅出——使用jQuery UI