还有一个场景,当您尝试使用操作系统的限制/无效的字符作为您的文件名。
对于Windows \/: * ? " < > |
这些是无效字符。尝试使用以下命令重命名文件:您将收到有关无效字符的气球/提示消息。
请尝试以下Java代码。
File file = new File("c:/outputlog-2013-09-20-22:15");
//A common scenario when you try to append java.util.Date to create a file like
//File newFile = new File(filename + "_" + new Date());
System.out.println(file.getAbsolutePath());
System.out.println(file.getCanonicalPath());
如果文件名包含
* ?
你会得到java.io.IOException异常:无效的参数
| :
你会得到java.io.IOException异常:文件名,目录名或卷标语法不正确
当您使用getCanonicalPath()方法。
如果我们使用任何" < >
字符的文件名,然后getCanonicalPath()方法是不失败,但是当您尝试创建你会得到无效参数异常的文件。
参见jdk7 api
规范形式的精确定义是依赖于系统的。在这里,我已经使用Windows 7的
+1:很好的例子:) – LaGrandMere 2010-12-20 13:21:26
这是否意味着如果文件不存在,这个方法将会失败,或者它只会失败的可移动驱动器?另外,@LaGrandMere说它已经在Java 1.5中修复了?那么这个例子不再是这种情况了? – gigadot 2010-12-20 13:28:16
@ gigadot:自己试一试,但我认为它会提高IOExpcetion。我的例子是关于一个已修复的错误,但给出的例子应该总是抛出一个IOException,这就是为什么我把+1放在它上面:) – LaGrandMere 2010-12-20 13:32:58