我实际上是在尝试创建一个具有特定文件名的文件。问题是,文件名包含德语变音符号,所以我总是会得到一个NullPointerException
.
代码如下所示:
File f = new File("/Volume/dir1/dir2/dirWithUmlauts");
File[] files = f.listFiles(); // NullPointerException
我在 Windows 上进行了相同的测试,并且可以正常工作。我不知道为什么它不能在 Mac 上运行。
我实际上是在尝试创建一个具有特定文件名的文件。问题是,文件名包含德语变音符号,所以我总是会得到一个NullPointerException
.
代码如下所示:
File f = new File("/Volume/dir1/dir2/dirWithUmlauts");
File[] files = f.listFiles(); // NullPointerException
我在 Windows 上进行了相同的测试,并且可以正常工作。我不知道为什么它不能在 Mac 上运行。
您说您正在尝试创建一个文件,但您的代码列出了目录的内容。您是否(无意中)列出了文件的“文件夹内容”?根据http://docs.oracle.com/javase/7/docs/api/java/io/File.html:“如果此抽象路径名不表示目录,则此方法返回 null。”
因此,如果我怀疑您试图列出非目录的内容,那么您的 File[] 数组是null
. 因此,当您尝试使用它时,您的代码将因 NPE 而爆炸
我不知道 Mac OS 将如何处理文件系统中的变音符号。但是,如果目录可以在 JVM 之外正确处理,它也必须在其中工作。
因此,尝试通过上listFiles()
一级列出目录的名称:
File d = new File("/Volume/dir1/dir2/");
for( File f : d.listFiles()) System.out.println(f.getName());
因此,您将看到打开文件时字符串的外观(它确实存在并且可以从 VM 访问);
解决方案: