Modificar automáticamente los nombres de los archivos en lotes

demanda

Como desarrollo de Android, a menudo es necesario importar cortes de IU en el proyecto, pero los archivos de cortes de IU generalmente se nombran en chino, y en el proyecto de Android, el nombre del archivo dibujable no puede usar caracteres chinos y el inglés no puede tener letras mayúsculas. Espacios, y para facilitar la lectura, necesitamos separar las palabras con "_", por lo que debemos traducir el nombre del archivo de la imagen cortada al estilo que necesitamos.

lograr

  1. Solicite abrir la API de traducción universal de Baidu, obtenga "APP_ID y clave", estos dos son obligatorios

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

    Una vez que la aplicación es exitosa, puede verla en la información del desarrollador.

  2. Código

    Hay cuatro archivos java

    MD5, HttpGet, TransApi son los archivos de demostración traducidos por Baidu. Necesitamos usarlos para usar la API de Baidu Translate.

    https://fanyiapp.cdn.bcebos.com/api/demo/java.zip se puede descargar a través del enlace

    FileNameChange es un archivo que se da cuenta de nuestras necesidades específicas llamando a los archivos en la demostración traducida por Baidu

    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. Una vez implementado el código, se ejecuta. Encontré aquí que el código anterior no se puede ejecutar directamente en Android Studio, y no se puede resolver temporalmente consultando la información.

    Entonces, el código solo se puede ejecutar en el entorno java, como ejecutar en idea, si hay una mejor manera, puede dejar un mensaje en el área de comentarios, gracias

Fin

Aunque no he encontrado la mejor manera, aún puedo resolver el problema. Espero que te ayude un poco.

La dirección del proyecto https://gitee.com/cl1016/file-name-change se puede recoger si es necesario

Supongo que te gusta

Origin blog.csdn.net/weixin_43435453/article/details/109298766
Recomendado
Clasificación