一些坑 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);

或者直接把配置文件放在某個固定目錄下,然后配置文件里面手動寫一下,但是我如果配置文件更新還要手動把配置文件復制到那個目錄


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM