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

标签 java file conventions fileinputstream fileoutputstream

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

public FileInputStream(String name) throws FileNotFoundException

public FileInputStream(File file) throws FileNotFoundException

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

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

您可以看到我在那里创建了一个文件。没有它我也可以做到:

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

从 JDK 源代码来看,它们的工作方式似乎几乎没有区别。以下是采用 String 的构造函数的源代码:

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

所有这些与 FileOutputStream 基本相同。

使用其中一个构造函数是否是我不知道的约定,两者都有什么好处吗? FileInputStreamFileOutputStream 的情况是否不同?

最佳答案

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

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

关于java - 创建流时是否应该显式创建文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24995617/

相关文章:

objective-c - 带有@synthesize 的自动 iVar

python - 一个函数应该打印一个字符串还是返回它?

java - 如何从 JSONObject 获取文件或流?

java - 在 JavaFx 中将形状或对象从一个 fxml 复制/克隆到另一个 fxml

javascript - Firefox 和 IE 中的图像源分配

c - C++ 中文件指针的实例

java - 是否可以将普通的java项目转换为springboot项目?

java - 如何用LinkedHashMap获取子图?

php - 使用 PHP 存储和获取多个段落

python - 用于函数调用的 PEP-8