2013-10-31 70 views
2

Java.iO.File文件說,有關它的構造函數下面的話更是把pathname關於文件的文件=新的文件(路徑)

public File(String pathname)

通過轉換給定的路徑名​​字符串 創建一個新的文件實例轉換爲抽象路徑名。如果給定的字符串是空字符串, 那麼結果是空的抽象路徑名。

但如果pathname指向一個文件,該文件是已有什麼?

File file = new File(PATH_TO_AN_EXISTING_FILE); 

是否上述file實例代表一個全新的文件(與現有的一個被刪除?)或者不代表現有的文件?

+2

爲什麼不嘗試? – RamonBoza

+0

我沒有看到downvoting的原因。 – Maroun

回答

4

該文檔說的是它將創建一個新的File實例。這意味着它將在File類的內存中創建一個新實例。

此對象將指向您文件系統上的文件。但是,如果該文件存在,則不會創建新文件。

0

java.io.File類表示某個文件系統上的路徑。它不直接綁定到文件。當您創建File實例時,您是而不是打開文件。

A File對象只是堆上的一個對象。是的,它的確有字段和方法暗示這個對象代表一個真實的文件(或一個目錄:看到含糊不清?)。 您可以爲不存在的文件/目錄創建File對象:文件系統不會發生任何事情;將創建File實例。畢竟,File只是一個描述符。此外,您可以創建多個具有不同路徑的對象(特別是當一個是絕對路徑,其他路徑是相對於不同父路徑的路徑時),但是在實際評估它們時,它們都指向相同的文件/目錄(由打開文件與In/OutputStreamReader/Writer;與exists()檢查或創建時:createFile()createDirectory()

+0

但我稍後會更新文件的內容,我想知道現有文件是否會被新文件替換 –

+0

我想這些類型的歧義是Java 7爲什麼會使用Path類的一部分。 – afk5min

2

我認爲文檔是有點混亂:創建Java中的新File對象並不意味着在你的文件中的新文件的創建。系統。File對象僅僅是文件和目錄路徑名的抽象表示,它可能表示或不表示真正的fil在磁盤上或在網絡存儲上。

這是代表的東西的地址的String或多或少相當於:當你寫

String str = "1600 Pennsylvania Ave NW, Washington, DC 20500"; 

創建與現有建築的地址字符串。在您創建的字符串str與正好位於該地址的白宮之間沒有其他連接。

與現有的路徑名稱和一個不存在的路徑名創建的文件創建一個File之間的唯一區別是,exists()對前者的調用將返回true,而在後,同樣的通話將返回false

1

A File不直接鏈接到文件系統上的實際文件。如果文件存在,它將指向該文件。如果該文件不存在,則不會創建該文件。 exist()將返回false。

0

這是一個非常容易混淆命名的類。

A File object代表文件路徑,而不是實際文件。所以當你創建一個File對象時,你不會在文件系統上改變任何東西。從概念上講,這與String沒什麼兩樣。

在java.nio中,該類已被重命名爲(更直觀)Path

0

文件f =新的文件(「C:// Existing_file」)

上述線指示已存在的文件不是新的要創建的文件。 文件類實例始終引用IO操作,並且它始終引用已包含的文件