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


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

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

  • 相关阅读:
    20201112 装饰器之函数即变量
    2月13日:毕业设计进度
    2月12日:毕业设计进度
    2月11日:毕业设计进度
    2月10日:毕业设计进度
    2月9日:毕业设计进度
    2月8日:毕业设计进度
    2月7日:毕业设计进度
    2月6日:毕业设计进度
    2月5日:毕业设计进度
  • 原文地址:https://www.cnblogs.com/stdpain/p/10995860.html
Copyright © 2020-2023  润新知