Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OS X中Java 7文件名的编码问题_Java_Macos_File_Encoding_Java 7 - Fatal编程技术网

OS X中Java 7文件名的编码问题

OS X中Java 7文件名的编码问题,java,macos,file,encoding,java-7,Java,Macos,File,Encoding,Java 7,我有以下代码: public static void main( String[] args ) { System.out.println(Locale.getDefault()); File f = new File("/Users/johngoering/Documents"); File[] fs = f.listFiles(); for (File ff : fs) { System.out.println(ff.getName());

我有以下代码:

public static void main( String[] args ) {
    System.out.println(Locale.getDefault());
    File f = new File("/Users/johngoering/Documents");
    File[] fs = f.listFiles();
    for (File ff : fs) {
        System.out.println(ff.getName());
        System.out.println(ff.exists());
    }
}
在我的文档文件夹中,我有一个名为“öß.pdf”的文件。以下是Java 6下的输出:

 en_US
 (...)
 öß.pdf
 true
 (...)
但以下是Java 7下的输出:

 en_US
 (...)
 o����.pdf
 false
 (...)
请特别注意,
file.exists
对于由
listFiles
返回的文件返回
false
!!
有什么好处?有办法解决这个问题吗?这看起来很像Java 7的bug…

在Oracle的帮助下,我们发现了一个解决方法:Eclipse中的环境变量
LC\u CTYPE
没有设置为
UTF-8
(以及从JNLP或其他地方开始时)。 这解释了代码在终端上工作的原因,因为OSX终端默认情况下“设置区域设置环境变量”(该选项可以关闭,然后即使在终端中也会遇到与上述相同的问题)

在启动器中设置此环境变量可以解决此问题


我仍然认为这是java 7的一个bug,因为java 6即使没有这个变量也能工作。

呃……看看代码?System.outIn在terminal out Java控制台或IDE控制台中?您可以尝试,但请特别查看file.exists。。。为什么file.exists会为false?对于使用JAR启动器启动的应用程序也是如此(即双击):它们看不到任何使用umlauts的文件。当File.exists=false时,任何目录过滤器都将消除这些错误-它们根本不会显示。所以这需要修正-我不能一直从Eclipse运行我的应用程序!