簡體   English   中英

Java File.createTempFile()拋出NullPointerException

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM