Java File.createTempFile()抛出NullPointerException

时间:2016-10-15 19:15:31

标签: java 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。知道为什么会抛出这个特殊的异常吗?

3 个答案:

答案 0 :(得分:3)

根据JavaDoc

,前缀不能为空
  

参数:

     

prefix - 用于生成文件名称的前缀字符串;必须至少三个字符

     

后缀 - 用于生成文件名称的后缀字符串;可以为null,在这种情况下后缀为" .tmp"将被使用

答案 1 :(得分:1)

java doc说“前缀用于生成文件名的前缀字符串;必须至少有三个字符长”。正是为什么它抛出空指针异常。这是链接File java doc

答案 2 :(得分:0)

根据错误输出,异常是NullPointerException。但是,根据File.createTempFile的Javadocs,这不是抛出的异常。这意味着您的代码会发生意外情况。我们可以看到source code以确切了解正在发生的事情(请记住第三个参数directory为null,因为您使用了重载版本)。

它首先做的是检查prefix的长度,并确保它不小于3(在2000行)。但是,由于prefix的值为null,因此检查length()将始终返回NullPointerException,因为您无法调用null对象上的任何方法。事实上,它甚至没有抛出InvalidArgumentException,这进一步证明它在if-check中死亡。我们也可以在Javadoc和源代码中看到它需要prefix成为一个包含3个字符的String。有趣的是,在Java 6中,如果prefix为null,则此方法 显式抛出NullPointerException。