[英]Java File.createTempFile() throws NullPointerException
此Java 1.8.0_102程序:
import java.io.File;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
File tempFile = null;
try {
tempFile = File.createTempFile(null, null);
} catch (IOException e) {
e.printStackTrace();
}
}
}
引發此異常:
Exception in thread "main" java.lang.NullPointerException
at java.io.File.createTempFile(Unknown Source)
at java.io.File.createTempFile(Unknown Source)
at Main.main(Main.java:10)
根據Javadocs,兩個參數都可以為null。 知道為什么會拋出此特定異常嗎?
根據JavaDoc,前綴不能為null
參數:
prefix-用於生成文件名的前綴字符串; 必須至少三個字符長
suffix-用於生成文件名的后綴字符串; 可以為null,在這種情況下將使用后綴“ .tmp”
Java文檔說“ prefix用於生成文件名的前綴字符串;必須至少三個字符長”。 正是為什么它會引發空指針異常。 這是鏈接文件java doc
根據錯誤輸出,異常為NullPointerException。 但是,根據File.createTempFile的Javadocs,這不是拋出的異常。 這意味着您的代碼發生了意外情況。 我們可以看到源代碼以確切了解正在發生的事情(請記住,第三個參數,由於您使用了重載版本, directory
為null)。
它做的第一件事是檢查prefix
的長度,並確保其長度不少於3(在2000行)。 但是,由於您的prefix
值為null
,因此對它的length()
進行檢查將始終返回NullPointerException,因為您無法在null對象上調用任何方法。 它甚至沒有拋出InvalidArgumentException的事實進一步證明了它在if-check中死亡。 我們還可以在Javadoc和源代碼中看到它要求prefix
為3個字符的字符串。 有趣的是,在Java 6中,如果prefix
為null,則此方法確實顯式拋出NullPointerException。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.