架构师

您现在的位置是:首页 > 技术博客 > 爱运维

爱运维

最后一个字乱码

架构师小跟班 2020-07-01 爱运维
昨天晚上写了一个小功能,列出指定文件夹下的所有文件的文件名,结果报错。错误信息:Exception in thread "main" cn.hutool.core.io.IORuntimeException: Path [D:\学习充电\爱

昨天晚上写了一个小功能,列出指定文件夹下的所有文件的文件名,结果报错。

错误信息:

Exception in thread "main" cn.hutool.core.io.IORuntimeException: Path [D:\学习充电\爱剪辑爱壀杈?] is not directory!

at cn.hutool.core.io.FileUtil.ls(FileUtil.java:130)

at cn.hutool.core.io.FileUtil.listFileNames(FileUtil.java:328)

at com.provy.jiagou.file.FileUtils.listFileName(FileUtils.java:42)

at com.provy.jiagou.file.FileUtils.main(FileUtils.java:34)

Process finished with exit code 1

错误原因:

一个汉字,使用UTF-8编码占3个字节(123|456|789),GBK编码占两个字节(12|34|56|78|9),所以最后一个字少一位字节,使用?代替。

如何解决?

将字符编码设置成一致就可以了。比如在IDEA中,在右下角有个切换字符集的地方:

检查是否生效(比较坑爹的是,有时候即使更改了但是没有生效,害我折腾了一晚上),这两个打印值都是GBK才是对的。

//查看当前系统的字符编码方式

System.out.println(Charset.defaultCharset().name());

//查看当前系统的编码方式

System.out.println(System.getProperty("file.encoding"));

package com.provy.jiagou.file;

import cn.hutool.core.io.FileUtil;
import java.nio.charset.Charset;

/**
 * @author 架构师小跟班 jiagou1216.com
 * @Description: list文件名
 * @date 2020/7/10:11
 */

public class FileUtils {

    //需要处理的文件夹/文件
    public static String PATH = "D:\\学习充电\\测试爱剪辑";

    public static void main(String[] args) {
        //查看当前系统的字符编码方式
        System.out.println(Charset.defaultCharset().name());
        //查看当前系统的编码方式
        System.out.println(System.getProperty("file.encoding"));
        //列出指定目录下所有文件的名称
        for (String listFileName : FileUtil.listFileNames(PATH)) {
            System.out.println(listFileName);
        }
    }

}


文章评论