使用fileinputstream在java中读取文件

时间:2015-05-26 07:04:24

标签: java fileinputstream

我是编程新手,我需要帮助理解创建fileinputstream对象以读取文件的两种方法之间的区别。我在互联网上看过一些例子,有些人使用过第一张,有些人则用过第二张。我很困惑哪个更好,为什么?

FileInputStream file = new FileInputStream(new File(path));

FileInputStream file = new FileInputStream(path);

5 个答案:

答案 0 :(得分:6)

两者都很好。第二个隐式调用第一个

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

如果您有参考 文件应该阅读,请使用前者。否则,您应该使用后者(如果您只有路径)。

答案 1 :(得分:3)

请勿在2015年使用。请改用Files.newInputStream()。在try-with-resources语句中,在:

final Path path = Paths.get("path/to/file");

try (
    final InputStream in = Files.newInputStream(path);
) {
    // do stuff with "in"
}

更一般地说,如果可以避免,请不要在2015年的新代码中使用任何File。 JSR 203,又名NIO2,又名java.nio.file,比java.io.File要好得多。它自2011年以来一直存在。

答案 2 :(得分:3)

FileInputStream类有三个构造函数。在official documentation中描述:

FileInputStream(File file)
  

通过打开与实际文件的连接来创建FileInputStream,该文件是由文件系统中的File对象文件命名的文件。

FileInputStream(String name)
  

通过打开与实际文件的连接来创建FileInputStream,该文件是由文件系统中的路径名称命名的文件。

FileInputStream(FileDescriptor fdObj)
  

使用文件描述符fdObj创建FileInputStream,该文件描述符表示与文件系统中实际文件的现有连接。

如你所见,没有什么不同。

实际上他们都有相同的方式来打开文件。第一个构造函数调用

SecurityManager.checkRead(File.getPath())

第二个使用与<{p>}相同的checkRead()

SecurityManager.checkRead(name)

答案 3 :(得分:0)

如果你想使用

FileInputStream file = new FileInputStream(new File(path));

对于创建FileInputStream需要更多时间,如果我没有弄错,因为这个构造函数用安全管理器做了一些检查

答案 4 :(得分:0)

两者之间没有太大区别,如 FileInputStream file = new FileInputStream(path) 隐含地呼唤其他人。

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

但是为了更好地利用两个可用的构造函数,我们可以使用构造函数在已经存在File对象时使用File参数,这样我们就可以避免创建另一个隐式创建的文件对象如果我们使用另一个构造函数

其次,最好在检查文件的存在后创建FileinputStream对象,这可以通过使用file.exists()进行检查,在这种情况下我们可以避免FileNotFoundException。