自動批量修改檔名
阿新 • • 發佈:2020-10-26
需求
作為一個android開發,經常需要將UI的切圖匯入專案中,但是UI切圖檔案通常是中文命名,而在android專案中,drawable檔名是不能用中文字元的,並且英文不能有大寫字母,空格,並且為了可讀性性,我們需要在單詞間用“_”隔開,所以我們需要將切圖檔名翻譯為我們需要的樣式
實現
-
申請開通百度通用翻譯API,得到"APP_ID和金鑰",這兩個是必需的
https://api.fanyi.baidu.com/doc/12
申請成功後可以在開發者資訊中檢視
-
程式碼實現
一共有四個java檔案
MD5,HttpGet,TransApi為百度翻譯的demo檔案,我們需要使用他們來使用百度翻譯的API
https://fanyiapp.cdn.bcebos.com/api/demo/java.zip可以通過連結下載
FileNameChange是通過呼叫百度翻譯的demo中的檔案實現我們具體需求的檔案
FileNamechange.java
import org.json.JSONArray; import org.json.JSONObject; import java.io.File; import java.io.UnsupportedEncodingException; /** * Created with IntelliJ IDEA. * * @Auther: jayclin * @Date: 2020/09/30/11:53 * @Description: */ public class FileNameChange { private static final String APP_ID = "";//使用自己的APP_ID private static final String SECURITY_KEY = "";//同上 /** * 從json字串中提取英文翻譯 * @param jsonData * @return */ private static String parse(String jsonData) { try { JSONObject jsonObject = new JSONObject(jsonData); JSONArray results = jsonObject.getJSONArray("trans_result"); JSONObject result = results.getJSONObject(0); return (String) result.get("dst"); } catch (Exception e) { e.printStackTrace(); return ""; } } /** * 將path路徑下所有的檔名改為英文 * @param path * @throws UnsupportedEncodingException * @throws InterruptedException */ public static void changeFileName(String path) throws UnsupportedEncodingException, InterruptedException { TransApi api = new TransApi(APP_ID, SECURITY_KEY); File file = new File(path); File[] list = file.listFiles(); if (file.exists() && file.isDirectory()) { for (int i = 0; i < list.length; i++) { String name = list[i].getName(); int index = name.indexOf("."); String name2 = name.substring(0, index);//檔名字首 int index2 = name.lastIndexOf("."); String name3 = name.substring(index2); Thread.sleep(1000);//百度API的免費版本1秒只能有一個接入 String result = api.getTransResult(name2, "auto", "en"); String enString = parse(result); enString=enString.replace("-", ""); String newName = enString.replace(' ', '_') + name3; //重新命名 File dest = new File(path + "/" + newName.toLowerCase()); list[i].renameTo(dest); System.out.println(dest.getName()); } } } /** * 改變android的Drawable資料夾的不同dp的所有檔名,只需將該drawable檔案路徑傳入 * @param path */ public static void changeDrawableFile(String path){ File file=new File(path); File[] list=file.listFiles(); if (file.exists()&&file.isDirectory()){ for (int i=0;i<list.length;i++){ String name=list[i].getName(); String newPath=path+"/"+name; try { changeFileName(newPath); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } } } public static void main(String[] args) { changeDrawableFile("/Users/mac/Downloads/更多"); } }
-
程式碼實現之後就是執行,我在這裡發現在android studio中無法直接執行上面的程式碼,通過查閱資料暫時無法解決。
所以只能在java環境中執行該程式碼了,如在idea中執行,如果有更好的方法可以在評論區留言,謝謝
結束
雖然沒有找到最優的方法,但是還是能夠解決問題的,希望對大家有一點幫助