zoukankan      html  css  js  c++  java
  • 一些坑 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);
    

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

  • 相关阅读:
    面向对象设计原则
    简单工厂模式和策略模式结合使用php
    lua string
    js.ajax优缺点,工作流程
    深入理解JavaScript是如何实现继承的
    js中哈希表的几种用法总结
    js,indexOf()、lastIndexOf()
    js获取字符串字节数方法小结
    JS(JavaScript)插入节点的方法appendChild与insertBefore
    js中的this关键字详解
  • 原文地址:https://www.cnblogs.com/stdpain/p/10995860.html
Copyright © 2011-2022 走看看