簡體   English   中英

使用fileinputstream在Java中讀取文件

[英]Reading a file in java using fileinputstream

我是編程新手,我需要幫助您了解創建用於讀取文件的fileinputstream對象的兩種方式之間的區別。 我在互聯網上看到過一些示例,有些使用了第一個,第二個使用了。 我很困惑,哪個更好,為什么?

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

FileInputStream file = new FileInputStream(path);

兩者都很好。 第二個隱式調用第一個。

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

如果您引用了應該讀取的文件 ,請使用前者。 否則,您可能應該使用后者(如果只有路徑)。

在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年以來一直存在。

FileInputStream類具有三個構造函數。 官方文檔中描述:

FileInputStream(File file)

通過打開與實際文件的連接來創建FileInputStream,該文件由文件系統中的File對象文件命名。

FileInputStream(String name)

通過打開與實際文件的連接來創建FileInputStream,該文件由文件系統中的路徑名命名。

FileInputStream(FileDescriptor fdObj)

通過使用文件描述符fdObj創建FileInputStream,該描述符表示與文件系統中實際文件的現有連接。

如您所見,這里沒有真正的區別。

實際上,它們都有相同的打開文件的方式。 第一個構造函數調用

SecurityManager.checkRead(File.getPath())

第二個使用相同的checkRead()作為

SecurityManager.checkRead(name)

如果你想使用

FileInputStream文件=新FileInputStream(新File(路徑));

如果我沒記錯的話,創建FileInputStream需要更多時間,因為此構造函數與安全管理器進行了一些檢查

兩者之間沒有太大區別,因為FileInputStream file = new FileInputStream(path)隱式調用other。

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

但是為了更好地利用兩個可用的構造函數,我們可以在已經有File對象的情況下使用帶有File參數的構造函數,因此我們將避免創建另一個將隱式創建的文件對象。

其次,最好僅在檢查了文件的存在之后才創建FileinputStream對象,這可以通過使用file.exists()進行檢查,在這種情況下,我們可以避免FileNotFoundException。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM