0

我实际上是在尝试创建一个具有特定文件名的文件。问题是,文件名包含德语变音符号,所以我总是会得到一个NullPointerException.

代码如下所示:

File f = new File("/Volume/dir1/dir2/dirWithUmlauts");
File[] files = f.listFiles(); // NullPointerException

我在 Windows 上进行了相同的测试,并且可以正常工作。我不知道为什么它不能在 Mac 上运行。

4

2 回答 2

0

您说您正在尝试创建一个文件,但您的代码列出了目录的内容。您是否(无意中)列出了文件的“文件夹内容”?根据http://docs.oracle.com/javase/7/docs/api/java/io/File.html:“如果此抽象路径名不表示目录,则此方法返回 null。”

因此,如果我怀疑您试图列出非目录的内容,那么您的 File[] 数组是null. 因此,当您尝试使用它时,您的代码将因 NPE 而爆炸

于 2013-07-03T20:03:57.557 回答
0

我不知道 Mac OS 将如何处理文件系统中的变音符号。但是,如果目录可以在 JVM 之外正确处理,它也必须在其中工作。

因此,尝试通过上listFiles()一级列出目录的名称:

File d = new File("/Volume/dir1/dir2/"); 
for( File f : d.listFiles()) System.out.println(f.getName());

因此,您将看到打开文件时字符串的外观(它确实存在并且可以从 VM 访问);


解决方案:

File.listFiles() 使用 JDK 6 破坏 unicode 名称(Unicode 规范化问题)

于 2013-07-03T20:03:00.630 回答