我注意到我们生产代码中存在这个问题:
根本原因是这个:
“缺失”的文件名为"µ" (Mu)和"€" (Euro)。
此外,这些文件名似乎使用了错误的编码方式。当我在bash中列出这些文件时,它们也显示不正确。当我将
但尽管如此…
是否已经有了bug-report?有什么方法可以修复这个问题吗?(重命名文件不是一个选项,因为它们是由用户生成的,可能以任何形式重新出现。)
我的系统:
java.lang.IllegalArgumentException: /somePath/�.png does not exist
at org.apache.commons.io.FileUtils.sizeOf(FileUtils.java:2413)
at org.apache.commons.io.FileUtils.sizeOfDirectory(FileUtils.java:2479)
根本原因是这个:
import java.io.File;
public class FileNameTest
{
public static void main(String[] args)
{
File[] files = new File("/somePath").listFiles();
for (File file : files)
{
System.out.println(file + " - " + (file.exists() ? "exists" : "missing!!"));
}
}
}
输出:
0.png - exists
7.png - exists
4.png - exists
8.png - exists
1.png - exists
3.png - exists
�.png - missing!!
2.png - exists
5.png - exists
�.png - missing!!
6.png - exists
d.png - exists
$.png - exists
s.png - exists
+.png - exists
9.png - exists
“缺失”的文件名为"µ" (Mu)和"€" (Euro)。
此外,这些文件名似乎使用了错误的编码方式。当我在bash中列出这些文件时,它们也显示不正确。当我将
ls
的输出从latin1转换为UTF-8时,它们会正确显示(至少是mu)。但尽管如此…
- 这些文件确实存在
- file.listFiles()会将它们列出
- 对于这两个特殊情况:file.exists()返回false
是否已经有了bug-report?有什么方法可以修复这个问题吗?(重命名文件不是一个选项,因为它们是由用户生成的,可能以任何形式重新出现。)
我的系统:
- Ubuntu 4.2.0
- Java版本 "1.8.0_102"
- Java(TM) SE运行环境 (版本 1.8.0_102-b14)
- Java HotSpot(TM) 64位服务器虚拟机 (版本 25.102-b14, 混合模式)
- Apache Commons IO 2.4