2013-07-03 52 views
0

我实际上正在尝试创建一个具有特定文件名的文件。问题是,文件名包含德语变音符号,所以我总是会得到一个NullPointerExceptionJava Mac创建新的文件(路径) - 与德语变音路径

的代码看起来是这样的:

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

我测试了相同的Windows和它的作品。我不知道为什么它不适用于Mac。

+0

将来,您可能希望在问题标题或说明中指定“OS X”。它会使你想要的更明显。我现在会深入地读这个问题。 –

+0

哦,是的。当然。 – user2048767

+0

这对我来说很好。你能给我们堆栈跟踪吗?你确定路径是正确的吗? – LaurentG

回答

0

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

所以尝试列出目录的名称海槽listFiles()一个水平之上:

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

所以,你会看到字符串如何有看起来像打开的文件(也真的存在并且可访问来自VM);


SOLUTION:

File.listFiles() mangles unicode names with JDK 6 (Unicode Normalization issues)

+0

该名称包含一个问号。 – user2048767

+0

由于提问者没有提到有关虚拟机的任何信息,我会假设你的意思是JVM。如果这是正确的,你可能想编辑你的帖子,以避免混淆。除此之外,很好的答案! –

+0

@ user2048767 http://stackoverflow.com/questions/3610013/file-listfiles-mangles-unicode-names-with-jdk-6-unicode-normalization-issues about Java 1.6,但我认为它也会对你有所帮助;) –

0

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

因此,如果我怀疑你试图列出一个非目录的内容,你的File []数组是null。因此,当您尝试使用它时,您的代码将与NPE一起爆炸

+0

@MarvinEmilBrach,这不正是我想要的,但也可以。我的意思是他试图查看目录的内容,除了该目录是一个实际的文件。我不知道java如何处理这样的事件。 –

+0

http://docs.oracle.com/javase/6/docs/api/java/io/File.html#listFiles%28%29:**如果此抽象路径名不表示目录**,则返回null。 。不过:llya很好,有些东西与代码混淆了(在IDE中或在这里) –

+1

@MarvinEmilBrach:仔细阅读。我的论点只适用于他试图使用他创建的File []数组,而“目录”实际上不是目录。 –