如果拒绝在文件名中打开带有特殊字符的文件,如何修复java?

时间:2011-04-14 13:06:16

标签: java linux file-io

如何使用Java拒绝打开的特殊字符打开文件?

一开始我觉得这是一个字符集编码问题,因为我从日志文件中读取错误的文件名。但后来我发现,它可能是JVM的一个bug,我需要一个解决方法。

真实的例子比单词更好

import java.io.*;
public class WTF{
        public static void main(String[] s)throws Exception{
                File f2=new File(".");
                for (File subFile : f2.listFiles()) {
                        System.out.println(subFile.getName());
                        System.out.println(subFile.exists());
                        System.out.println(new FileInputStream(subFile));
                }
        }
}

结果

[USER@SERVER ZZZ]$ java -cp . WTF
WTF.class
true
java.io.FileInputStream@732dacd1
WTF.java
true
java.io.FileInputStream@3bad086a
ABC_�%81DEF.txt
false
Exception in thread "main" java.io.FileNotFoundException: ABC_�%81DEF.txt (No such file or directory)
        at java.io.FileInputStream.open(Native Method)
        at java.io.FileInputStream.<init>(FileInputStream.java:106)
        at java.io.FileInputStream.<init>(FileInputStream.java:66)
        at WTF.main(WTF.java:8)

该文件夹包含

[USER@SERVER ZZZ]$ ls -lb
-rw-r--r-- 1 USER GROUP    8 Apr 14 20:54 ABC_\303%81DEF.txt
-rw-r--r-- 1 USER GROUP 1068 Apr 14 20:58 WTF.class
-rw-r--r-- 1 USER GROUP  554 Apr 14 20:58 WTF.java

2 个答案:

答案 0 :(得分:9)

答案 1 :(得分:0)

可能的解决方法是使用系统命令仅使用标准的“友好”字符重命名或链接到文件。看似hacky但我认为它会起作用。