一些坑 Java 执行命令行命令 Spring Boot 打包为jar ResourceUtils.getFile 等出现的问题

时间:2023-12-31 09:07:14

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);

或者直接把配置文件放在某个固定目录下,然后配置文件里面手动写一下,但是我如果配置文件更新还要手动把配置文件复制到那个目录