创建流时是否应显式创建文件?

时间:2014-07-28 12:48:32

标签: java file conventions fileinputstream fileoutputstream

我想知道Java的FileInputStream s(以及FileOutputStream s)的属性。创建它们时,您可以使用以下任一构造函数:

public FileInputStream(String name) throws FileNotFoundException

public FileInputStream(File file) throws FileNotFoundException

我经常看到(并编写)这样的代码:

InputStream in = new FileInputStream(new File("data.txt"));

你可以看到我在那里创建File。没有它,我也可以这样做:

InputStream in = new FileInputStream("data.txt");

通过JDK源代码,它们的工作方式似乎没有区别。以下是构造函数的源String

public FileInputStream(String name) throws FileNotFoundException {
    this(name != null ? new File(name) : null);
}

对于FileOutputStream,所有这些基本相同。

使用其中一个构造函数是一个我不知道的约定,是否有任何好处? FileInputStreamFileOutputStream

是不同的情况吗?

1 个答案:

答案 0 :(得分:1)

虽然第一个构造函数FileInputStream(String name)可能更常使用,但它只是第二个,FileInputStream(File file),它允许使用File准确检查输入文件在我们将它与InputStream链接之前的类方法。

此外,创建FileOutputStream类对象的过程不依赖于是否存在适当的文件。当您创建FileOutputStream类的对象时,它将在打开文件之前创建一个文件以供将来编写。但是打开只读文件的尝试会引发异常。