Teleport文件名乱码怎么办?我是程序员啊!

Teleport文件名乱码怎么办?我是程序员啊!

#说在前面

可能很多人还不知道Teleport是什么东西.其实就是个全站下载工具,能够将一些网站完整的克隆到本地存根.
因为本人有逛别人自建博客的习惯,当发现一些技术大神的干货的时候忍不住自己在本地留存一份.
但是久而久之发现一篇篇的保存也不是长久之计.
作为一个懒惰的程序员,我就开始各种问度娘,在度娘的建议下,我使用了Teleport作为我的"打手".
但是这个打手有个毛病,就是下载下来的文件名称中如果有中文,就会乱码,造成本地访问的时候链接不到对应的网页,十分的烦人.,
正当我到处百度方法的时候,我找到了一位老哥的博文
附上链接-解决teleport 下载的中文文件名乱码
这个老哥的思路是用php去转换文件编码(据他描述是因为windows下是gbk编码,而Teleport下载下来的文件名是utf8导致).
这时候,本来我可以直接使用它的代码,但是为了打破"php是世界上最好的语言"这个定论,我准备按照这个思路写个Java版的.
闲话就不多说了,撸起袖子开干!

#我的思路

简单说下我的思路,先写绝对路径,把绝对路径下的文件夹递归调用出来(因为不知道有多少层文件夹),遍历每个文件夹下的文件,将编码从utf8转换到gbk.
完工!

#代码实现

/*
* @author Laolata
* @description 编码转换工具,支持将文件夹下的任意格式编码转化为指定格式
* @blog 我的博客地址 https://blog.csdn.net/itkfdektxa
* */
public class ConvertEncoding {
    /*定义转换后的编码格式*/
    private final static String targetCharset = "GBK";
    /*定义转换计数器*/
    private static int count = 0;
    /*
    * @description 递归方法,递归指定目录下所有文件夹与文件,并重命名
    * @param originFile 递归文件或目录
    * */
    public static void renameFiles(File originFile) throws UnsupportedEncodingException {
        //递归出口
        if(originFile.isFile()){
            //对文件进行重命名
            byte[] newName = originFile.getName().getBytes(targetCharset);
            //将字节码转换为String
            String newNameStr = new String(newName);
            //创建新的完整路径
            String newPath = originFile.getParent()+File.separator+newNameStr;
            //重命名
            originFile.renameTo(new File(newPath));
            //计数器加一
            count++;
        }else{
            //文件夹递归调用自身
            File[] files = originFile.listFiles();
            for(File f:files){
                renameFiles(f);
            }
        }
    }
    /*
    * @description 测试方法
    * */
    public static void main(String[] args) throws UnsupportedEncodingException {
        File file = new File("需要转换的文件夹路径");
        System.out.println("开始调用");
        renameFiles(file);
        System.out.println("重命名完成,共重命名了"+count+"个文件");
    }
}

#运行效果

运行前:
在这里插入图片描述
运行后:
在这里插入图片描述
在这里插入图片描述
大功告成!

发布了37 篇原创文章 · 获赞 35 · 访问量 6500

猜你喜欢

转载自blog.csdn.net/itkfdektxa/article/details/103263827