File

Class Overview (類概述)

一個由路徑名確定文件系統實體的“抽象”表示。這個路徑名可能是絕對路徑(相對于文件系統的根目錄)或是相對于程序運行的當前路徑。

文件所引用的實際文件可能存在也可能不存在。它也可能是忽略文件的名稱,只是一個目錄或是一個非常規的文件。

這個類提供了有限的函數來獲取或設置文件的權限,文件的類型,文件的最后修改時間。

當 Android 字符串轉換為 UTF-8 字節序列時,發送文件到操作系統,字節序列會被系統返回(從各種列表方法)按照 UTF-8 轉換為字符串。

Fields(字段)

public static final String pathSeparator 系統相關的字符串,用于在搜索路徑中分離組件(“:”)。

public static final char pathSeparatorChar 系統相關的字符,用于在搜索路徑中分離組件。(':')。這個是用來把 PATH 環境變量和類路徑(classpath)系統屬性分割成要搜索的目錄列表。

public static final String separator 系統相關的字符串用于分割文件名(“/”)。

public static final char separatorChar 系統相關的字符,用于分割文件名(“/”)。使用這個(而不是硬編碼)有助于其他系統的可移植性。

該字段從系統屬性“file.separator”初始化。以后更改此屬性不會對該字段或該類有影響。

Public Construcorts (公共的構造方法)

public File(File dir,String name)

通過指定的目錄和名字創建一個新的文件。

參數:

dir 文件存儲的目錄

name 該文件的名字

異常:

空指針 當 name 為空時

public File (String path)

通過指定的路徑創建一個文件

參數:

path 作文件的路徑

異常:

空指針 當 path 為空時

public File(String path,String name)

通過指定的目錄路徑和文件名稱創建一個新的文件,在兩者之間放置一個路徑分割符。

參數:

dirPath 儲文件的目錄的路徑。

name 文件的名稱。

異常:

空指針 當 name 為空時。

public File (URI uri)

通過指定的 URI 路徑創建新的文件。uri 需要是具有文件方案和非空路徑組件的絕對和分層統一資源標識符,但具有未定義的權限,查詢或片段組件。

參數:

uri 被用來創建文件的統一資源標識符。

異常:

空指針 當 uri 為空時。

非法參數 當 uri 不符合上述條件時。

Public Methods (公共方法)

public boolean canExecute()

測試此程序是否允許執行此文件。這是最好的努力結果,確定的唯一方法就是實際嘗試操作。

返回值:

如果能執行返回 true ,否則返回 false。

public boolean canRead()

測試該文件在當前環境是否可讀。

返回值:

如果可讀返回 true ,否則返回 false。

public boolean canWrite()

測試該文件在當前環境是否可寫。

返回值:

如果可寫返回 true,否則返回 false。

public int compareTo(File another)

返回此文件和另一文件的路徑的相對排序順序。排序依賴于平臺。

參數:

another 與該文件比較的文件。

返回值:

通過比較兩個路徑確定的一個 int 值。可比較的值在 Comparable 接口中描述。

public boolean createNewFile()

根據文件中存儲的路徑信息在文件系統上創建一個新的空文件。如果創建一個文件返回 true,如果文件已經存在返回 false。注意,即使這個文件不是一個文件(因為它是一個目錄)也會返回 false。

這個方法通常不是有用的。如果創建一個臨時文件的話使用 createTempFile(String ,String)方法代替。如果是讀/寫文件的話,用 FileInputStream,FileOutputStream,或是 RandmAccessFile,所有的這些都能創建文件。

注意,如果這個文件已經存在這個方法是不會拋出 IO 異常的,即使它不是一個常規的文件。用戶應該始終檢查返回值,此外還應調用 isFile()方法。

返回值:

如果文件被創建返回 ture ,如果文件已經存在返回 false。

異常:

IO 異常 如果不能創建文件。

public static File createTempFile(String prefix,String suffix,File directory)

在指定的目錄創建一個文件,用指定的前綴和后綴作為文件名的一部分。如果后綴為空的話,則使用 .tmp。

注意,這個方法不會調用 deleteOnExit()方法,在手動調用該方法之前,請參閱該方法的文檔。

參數:

prefix 空文件名的前綴

suffix 空文件名的后綴

directory 要寫入臨時文件的位置,如果為 null 的話就是默認位置,這個默認位置是來自于
“java.io.tmpdir” 系統屬性。可能需要將此屬性設置為現有的可寫目錄,以使此方法
正常工作。

返回值:

臨時文件

異常:

參數非法 當前綴的長度小 3。

IO 異常 寫入文件是出錯。

public static File createTempFile(String prefix,String suffix)

創建一個臨時的空文件,使用指定的前綴和后綴作為文件名的一部分。如果后綴為空的話,則使用 .tmp。當調用 createTempFile(String,String,File)方法,第三個參數為空時,使用該方法是方便的。

參數:

prefix 文件名的前綴

suffix 文件名的后綴

返回值:

臨時文件

異常:

IO 異常 寫入文件出錯

public boolean delete()

刪除這個文件。目錄是空的才能刪除這個文件。

注意,刪除失敗時這個方法不會拋出 IO 異常,用戶必須要檢查返回值。

返回值:

如果文件被刪除返回 true,否則返回 false。

public void deleteOnExit()

當 VM 正常終止時,文件自動刪除。

注意,在 Android 中,生命周期不包括 VM 的終止,因此調用這個方法不能確定文件是否被刪除。所以你應該使用以下最有效的方法:

  • 使用 finally 語句手動調用 delete()方法
  • 把文件做為一個集合,在程序的生命周期的合適位置進行處理
  • 當任意一個reader 或 writer 打開它時,就使用 Unix 的策略刪除。沒有新的readers/writers 能夠訪問該文件,但是所有現有的 readers/writers 將仍然可以訪問,直到最后一個文件關閉。

public boolean equals(Object obj)

比較 obj 與這個文件,如果使用特定的路徑比較他們代表同一個對象就返回 true。

返回值:

當 obj 與當前的 file 代表的是同一個對象返回 true 否則返回 false。

public boolean exists()

返回一個布爾值表示這個文件是否能在底層文件系統找到。

返回值:

當這文件存在時返回 true 否則返回 false。

public File getAbsoluteFile()

返回一個使用該文件的絕對路徑創建的新的文件。等同于 new File(this.getAbsoluPath())。

public String getAbsolutePath()

返回該文件的絕對路徑。絕對路徑是開始于文件系統的根目錄。在 Android 中只有一個根目錄:/

絕對路徑的一個常用方法是將路徑作為命令行參數傳遞給進程,要移除相對路徑所隱藏的要求,該子目錄必須與其父目錄有相同的工作目錄。

public File getCanonicalFile()

返回用該文件的規范路徑創建的新的文件。等同于 new File(this.getCanonicalPath())。

返回值:

用該文件的規范路徑創建的新的文件。

異常:

IO 異常 發生 I/O 錯誤時。

public String getCanonicalPath()

返回該文件的規范路徑。絕對路徑是從文件系統的根開始的。規范路徑是具有符號鏈接和引用 “.” 或 “..” 的絕對路徑,如果路徑元素不存在(或不可搜索),則將規范化解釋為文本操作之間存在沖突(“a/../b” 的位置是 “b”,即使 “a” 不存在)。

大多數的用戶應該使用 getAbsolutePath()代替它。規范的路徑需要大量的計算,而且一般都是沒用的。規范路徑最常見的用法是,通過比較規范路徑測試兩個路徑是否指向同一個文件。

使用規范路徑可能是有害的,因為規范化刪除了符號鏈接。假設一個符號鏈接是有原因的,這是明智的,因為鏈接可能需要改變。規范除去了這個間接層。好的代碼一般避免緩存規范化路徑。

返回值:

文件的規范化路徑

異常:

IO 異常 當 IO 出現異常時。

public long getFreeSpace()

返回包含此路徑的分區上的空空余字節數。返回 0 當路徑不存在時。

注意,這可能是一個樂觀的高估,不應被視為一個保證應用程序實際上可以寫這么多字節。

public String getName()

返回由該文件表示的文件或目錄的名稱。

返回值:

該文件的名稱或是一個空的字符串當該文件的路徑沒有名稱部分。

public String getParent()

返回該文件的父文件的路徑名稱。

返回值:

該文件的父文件的路徑名稱或 null。

public File getParentFile()

返回由該文件的父文件的路徑名稱創建的一個新文件。這個路徑直到但不包括最后一個名稱。當該文件沒有父文件時返回 null。

返回值:

由該文件的父文件的路徑名稱創建的新文件,或是 null。

public String getPath()

返回文件的路徑。

public long getTotalSpace()

返回包含此路徑的分區上的全部字節數。返回 0 如果文件不存在。

public long getUsableSpace()

返回包含此路徑的分區上的可用字節數。返回 0 當此路徑不存在時。

注意,這可能是一個樂觀的高估,不應被視為一個保證應用程序實際上可以寫這么多字節。在 Android(或是其他以 Unix 為基礎的系統),此方法返回非 root 用戶的可用字節數,不管你是否實際運行為root,也不管用戶應用了其他任何配額或其他限制。(getFreeSpace 方法返回的字節數可能包含 root 的部分。)

public int hashCode()

返回接收器一個整型的哈希值。任何兩個相同的對象一定返回一樣的哈希值。

返回值:

文件的哈希值。

public boolean isAbsolute()

指示該文件的路徑名是否是絕對的。路徑名是否是絕對跟平臺相關。在 Android 中絕對路徑名開始于 '/' 字符。

返回值:

如果該文件的路徑名是絕對的返回 true 否則返回 false。

public boolean isDirectory()

指示該文件在文件系統上是否是一個目錄。

返回值:

如果該文件是一個目錄返回 true 否則返回 false。

public boolean File()

指示該文件在文件系統上是否是一個文件。

返回值:*

如果是文件返回 true 否則返回 false。

public boolean isHidden()

指示該文件是否是一個由操作系統定義的隱藏文件。隱藏這個概念是由系統決定的。在 Unix 系統中,當文件名是以 “.” 開頭的就被看作是隱藏的文件。對于 Windows 系統,在文件系統中有一個明確的標記來記錄隱藏文件 。

返回值:

如果是隱藏文件返回 true 否則返回 false。

public long lastModifide()

返回該文件最后修改的時間,精確到毫秒從 1970 年 1 月 1 日凌晨開始算起。如果文件不存在返回 0。

返回值:

文件最后的修改時間。

public long length()

返回文件的字節長度。文件不存在返回 0.如果是目錄則結果是未定義。

返回值:

文件的字節數。

public String[] list()

返回由該文件代表的目錄中的文件名的字符串數組。如果文件不是目錄則返回 null。

進入 . 和 .. 代表的是當前目錄的父目錄,不會作為該數組的一部分返回。

返回值:

該文件里的文件名的數組或 null。

public String[] list(FilenameFilter filter)

返回由該文件代表的目錄中的文件的數組。這個數組將通過 FilenameFilter 和作為字符串返回的具有匹配名稱的文件的名稱被過濾。如果該文件不是目錄返回 null。如果 filter 是 null 的話則所有的文件都可以匹配。

進入 . 和 .. 代表的是當前目錄的父目錄,不會作為該數組的一部分返回。

參數:

filter 匹配名稱的篩選器,可以為 null。

返回值:

文件數組或 null。

public File[] listFiles()

返回由該文件代表的目錄中的文件的數組。如果 file 不是目錄則返回 null。如果該文件的路徑是絕對路徑,那么數組中的路徑也是絕對路徑,否則是相對路徑。

返回值:

文件是數組或 null。

public static File[] lsitRoots()

返回文件系統的根。在 Android 或是其他 Unix 系統中,只有一個根 /。

public boolean mkdir()

由該文件創建一個目錄,假設它的父目錄是存在的。如果想要創建不存在的父目錄使用 mkdirs()。

注意,當出現錯誤時這個方法不會拋出異常。用戶必須檢查返回值。 注意,當目錄存在時返回 false。如果在返回時想要知道該文件是否存在,使用(f.mkdir() || f.isDirectory())或者忽略該方法的返回值直接調用 isDirectory().

返回值:

如果目錄被創建返回 ture,如果發生錯誤或是目錄已經存在返回 false。

public boolean mkdirs()

由該文件創建一個目錄,并且創建所有必須但不存在的父目錄。如果不想創建父目錄使用 mkdir()。

注意,當出現錯誤時該方法不會拋出異常。用戶必須要檢查返回值。注意,如果當目錄存在時返回 false。如果在返回時想知道目錄是否存在,使用(f.mkdirs() || f.isDirctory())或者忽略該方法的返回值,直接調用 isDirctory().

返回值:

如果目錄被創建返回 ture,如果發生錯誤或是目錄已經存在返回 false。

pubic boolean renameTo(File newPath)

以新路徑重命名文件。當兩個都是文件或都是目錄時該操作才能生效。

經常會發生一些錯誤。 一些更容易發生的錯誤包括:

  • 在包含源和目標路徑的目錄上寫入權限是必須的。
  • 兩個路徑的父路徑的查詢權限是必須的。
  • 兩個路徑都要在同一個掛載點上。在 Android 中,應用程序最有可能碰到這個限制,當試圖在內部存儲和 SD 卡之間復制時。

注意,當發生錯誤時該方法不會拋出異常。用戶必須檢查返回值。

參數:

newPath 新的路徑

返回值:

成功時返回 true。

public boolean setExecutable(boolean executable)

等同于 setExecutable(executable,true).

public boolean setExecutable(boolean executable,boolean ownerOnly)

操作此文件指定的抽象路徑的執行權限。

注意,當出現錯誤時該方法不會拋出異常,用戶必須檢查返回值。

參數:

executable 為 true 時允許執行權限,否則不允許。
ownerOnly 為 true 時只有自己有操作執行權限,否則就是所有人。如果底層系統不區分所有者和其他用戶,則該操作將應用于每個人,而不考慮該值。

返回值:

當且僅當操作成功時返回 true。如果用戶沒有權限去更改該抽象路徑的訪問權限則操作失敗。如果底層文件系統不支持執行權限或是 executable 的值為 false 時操作失敗。

public boolean setLastModified(long time)

設置文件最后被修改的時間,精確到秒從 1970 年 1 月 1 日凌晨開始。

注意,出現錯誤時該方法不會拋出異常,用戶必須檢查返回值。

參數:

time 文件最后被修改的時間。

返回值:

如果操作成功返回 true,否則返回 false。

異常:

參數非法異常 當 time < 0.

public boolean setReadOnly()

等同于 setWritable(false,fasle).

public boolean setReadable(boolean raedable)

等同于 setReadable(readable,ture).

public boolean setReadable(boolean readable,boolean ownerOnly)

操作此文件指定的抽象路徑的讀取權限。

參數:

readable 為 true 時允許讀的權限,否則不允許。
ownerOnly 為 true 時僅自己可操作讀的權限,否則是所有人。 如果底層系統不區分所有者和其他用戶,則該操作將應用于每個人,而不考慮該值。

*返回值:

當且僅當操作成功時返回 true。如果用戶沒有權限去更改該抽象路徑的訪問權限則操作失敗。如果底層文件系統不支持執行權限或是 readable 的值為 false 時操作失敗。

public boolean setWritable(boolean write,boolean ownerOnly)

操作此文件指定的抽象路徑的寫入權限。

*參數:

writable 為 ture 時允許寫的權限,否則不允許。
ownerOnly 為 true 時僅自己可操作寫的權限,否則是所有人。 如果底層系統不區分所有者和其他用戶,則該操作將應用于每個人,而不考慮該值。

返回值:

當且僅當操作成功時返回 true。如果用戶沒有權限去更改該抽象路徑的訪問權限則操作失敗。

public boolean setWritable(boolean writable)

等同于 setWritable(writable,ture).

public String toString()

返回一個簡潔的、可讀的描述該文件的字符串。

返回值:

描述文件的可打印的值。

public URI toURI()

返回文件的統一資源標識符。這個 URI 是由系統決定的,不能在不同的操作/文件系統之間轉換。

返回值:

文件的 URI.

public URL toURL()

在 API 19 中該方法已經被廢棄了。
使用 toURI() 和 toURL() 去正確的避開非法字符。

返回文件的統一資源定位符。URL 是由系統決定的,不能在不同的操作/文件系統之間轉換。

返回值:

文件的 URL

異常:

MalformedURLException 當路徑不能被轉換為 URL 時。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,362評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,577評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,486評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,852評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,600評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,944評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,944評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,108評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,652評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,385評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,616評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,111評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,798評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,205評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,537評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,334評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,570評論 2 379

推薦閱讀更多精彩內容