如果拒绝打开文件名中含有特殊字符的文件时如何解决java?

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

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

真正的例子比话语更好

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 

它可能与File.exists()失败与名称中的Unicode字符

一个可能的解决方法是使用系统命令重命名或链接到文件只使用标准的“友好”的字符。 似乎hacky,但我会认为这将工作。