1. 程式人生 > 實用技巧 >自動批量修改檔名

自動批量修改檔名

需求

​ 作為一個android開發,經常需要將UI的切圖匯入專案中,但是UI切圖檔案通常是中文命名,而在android專案中,drawable檔名是不能用中文字元的,並且英文不能有大寫字母,空格,並且為了可讀性性,我們需要在單詞間用“_”隔開,所以我們需要將切圖檔名翻譯為我們需要的樣式

實現

  1. 申請開通百度通用翻譯API,得到"APP_ID和金鑰",這兩個是必需的

    https://api.fanyi.baidu.com/doc/12

    申請成功後可以在開發者資訊中檢視

  2. 程式碼實現

    一共有四個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/更多");
        }
    }
    
    
  3. 程式碼實現之後就是執行,我在這裡發現在android studio中無法直接執行上面的程式碼,通過查閱資料暫時無法解決。

    所以只能在java環境中執行該程式碼了,如在idea中執行,如果有更好的方法可以在評論區留言,謝謝

結束

​ 雖然沒有找到最優的方法,但是還是能夠解決問題的,希望對大家有一點幫助

專案地址https://gitee.com/cl1016/file-name-change有需要可自取