Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么dir.mkdir()不需要异常处理,而file.createNewFile()需要异常处理?_Java_File_File Io - Fatal编程技术网

Java 为什么dir.mkdir()不需要异常处理,而file.createNewFile()需要异常处理?

Java 为什么dir.mkdir()不需要异常处理,而file.createNewFile()需要异常处理?,java,file,file-io,Java,File,File Io,下面是一段代码片段 File dir = new File("dir"); dir.mkdir(); File file = new File(dir,"file.txt"); try { file.createNewFile(); } catch (IOException e) { // TODO Auto-generated catch block e.

下面是一段代码片段

File dir = new File("dir");
        dir.mkdir();

        File file = new File(dir,"file.txt");

        try {
            file.createNewFile();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
我想知道为什么
dir.mkdir()
时不需要异常处理,而
file.createNewFile()时需要异常处理

我们是否非常确定在创建目录时“不会出错”?如果是,原因是什么

好问题

这种不同的行为真的没有很好的理由。


createNewFile()
在1.2版中添加到JDK,而
mkdir()
在1.0版中添加。这很可能是API设计者决定使用较新功能抛出IOException的原因。你可以肯定mkdir不会抛出IOException,因为合同上说不会。至于为什么。。。耸肩由不同的人在不同的时间以不同的观点来实现什么是“例外”。虽然我同意这是一个设计糟糕的API,但请注意,在创建目录时并没有假设“不会出错”。您只需要检查方法的返回值
true
表示目录是创建的,而
false
表示目录不是创建的。因为他们就是这样写的。请注意,即使是旧的POSIX也支持几个错误代码。同样适用于
SHCreateDirectoryEx
(包括臭名昭著的
ERROR\u SUCCESS
)。所以是的,不是最好的设计。