【问题标题】:Java File.createTempFile() throws NullPointerExceptionJava File.createTempFile() 抛出 NullPointerException
【发布时间】:2016-10-15 19:15:30
【问题描述】:

这个 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,两个参数都可以为空。知道为什么会抛出这个特定的异常吗?

【问题讨论】:

  • "根据 Javadocs,两个参数都可能为空" 你能引用那个文档片段吗?从我看到的thereprefix 字符串用于生成文件名;必须至少三个字符长”(强调我的)
  • 是的。请参阅我在已接受答案下方的评论。

标签: java nullpointerexception


【解决方案1】:

根据JavaDoc,前缀不能为空

参数:

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

suffix - 用于生成文件名的后缀字符串;可能为空,在这种情况下将使用后缀“.tmp”

【讨论】:

  • 我正在阅读 1.8.0_20 的 Javadocs,而不是 1.8.0_102 的 Javadocs,它们是不同的!我知道在使用不同版本进行编译时不要将 Javadocs 用于一个版本的 Java,但是对于 same 版本的不同版本,我从来没有遇到过这个问题。
  • @mbmast Java 不会将公共方法的合同从一个版本更改为下一个版本;这将违反面向对象设计的基本原则。我怀疑您将File.createTempFile(在 java.io 中)与 Files.createTempFile(在 java.nio.file 中)混淆了。
  • 呃。你是对的。 SO会因为羞耻而奖励徽章吗?
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    根据错误输出,异常为 NullPointerException。但是,根据File.createTempFile 的Javadocs,这不是抛出的异常。这意味着您的代码发生了一些意想不到的事情。我们可以通过查看source code 来准确了解发生了什么(请记住第三个参数,directory 为 null,因为您使用了重载版本)。

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

    【讨论】:

      猜你喜欢
      • 2021-01-31
      • 1970-01-01
      • 2017-09-24
      • 2017-12-25
      • 2016-05-03
      • 1970-01-01
      • 1970-01-01
      • 2014-12-22
      • 2017-08-11
      相关资源
      最近更新 更多