還有一個場景,當您嘗試使用操作系統的限制/無效的字符作爲您的文件名。
對於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