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