[英]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.