Java程序读取制定目录下的所有文件,调用listFiles函数,再迭代所有file,但是有部分文件显示中文乱码,并且isDirectory()和isFile()函数均返回FALSE。
- 使用 convmv 将文件名转码
将文件名称转码,需要用到 convmv,这是一个转码工具。
- 安装 convmv
Linux中安装命令如下:
yum install convmv
- 使用 convmv 对中文文件名进行转码
安装完 convmv 之后,就可使用 convmv 转码中文文件名了。为了操作方便,可写一个shell脚本,将文件名称转码:
convmv -f gbk -t utf-8 -r --notest /opt/ftp
上述命令,是将 /opt/ftp 路径下的所有文件名,都统一转码为utf-8。
这样中文名称的文件就能被程序读取到了。
在 Java服务里调用 shell 脚本,让其自动转码。Java 调用 shell 脚本的代码如下:
List<String> commend = new ArrayList<String>();
commend.add("convmv");
commend.add("-f");
commend.add("gbk");
commend.add("-t");
commend.add("utf-8");
commend.add("-r");
commend.add("--notest");
commend.add("/opt/ftp");
try{
ProcessBuilder builder = new ProcessBuilder();
builder.command(commend);
Process proc = builder.start();
proc.waitFor();
}catch(Exception e){
e.printStackTrace();
}
至此,问题解决。