“嗨,阿米戈。好久不見。”
“嗨,Bilaabo。你要談什麼?”
“今天我要給大家講講文件操作。Java 有一個特殊的類(File),可以用來管理硬盤上的文件。對於管理文件內容,還有其他類:FileInputStream、FileOutputStream 等。 “
“有趣。但是當你說‘管理文件’時,你是什麼意思?”
“這正是我現在要解釋的。文件可以創建、刪除、重命名等等。您可以將 File 對像傳遞給幾乎每個處理(讀取、寫入、更改)文件內容的類。 例如:”
FileInputStream input = new FileInputStream("c:/path/a.txt");
File file = new File("c:/path/a.txt");
FileInputStream input = new FileInputStream(file);
“但是第二個選項更長。我還是不明白為什麼我們需要這些文件對象。”
“對於這個具體的例子,你是對的。”這不是你必須如何做的例子,而是你可以如何做的例子。
但是想像一下,您需要顯示位於特定目錄中的所有文件的列表。以下是如何使用 File 對象完成此操作:"
File folder = new File("c:/path/");
for (File file : folder.listFiles())
{
System.out.println(file.getName());
}
“ listFiles()是一種返回由 «c:/path/» 指示的文件夾中的文件列表的方法嗎?”
“是啊,不過程序員一般都說‘目錄’,‘文件夾’這個詞是最近才用的,但原則上這兩個詞都對,你說哪個都行。”
“好的。那麼getName ()是做什麼的呢?返回文件名?文件名中到底包含什麼?是包含路徑的全名,還是文件本身的名稱?”
“只有文件本身的名稱。對於完整路徑,有 file.getAbsolutePath()。”
“那麼 File 類還有哪些其他方法?”
“看看這個:”
方法 | 描述 |
---|---|
boolean isDirectory() |
File 對像是一個目錄嗎? |
boolean isFile() |
對像是文件嗎? |
long length() |
以字節為單位返回文件大小/長度。 |
boolean createNewFile() |
如果具有此名稱的文件尚不存在,則創建一個新的空文件。 |
boolean mkdir() |
創建一個目錄。名稱 «mkdir» 來自 «make directory»。 |
boolean mkdirs() |
創建目錄及其所有子目錄。 |
boolean delete() |
刪除與對象關聯的文件。如果對像是目錄,則僅當目錄中沒有文件時才刪除該目錄。 |
void deleteOnExit() |
將文件添加到一個特殊的文件列表中,該列表將在程序退出時自動刪除。 |
File createTempFile( String prefix, String suffix, File directory) |
使用隨機生成的唯一名稱創建一個臨時文件,類似於 «dasd4d53sd»。 附加參數是名稱前綴和後綴。如果未指定目錄,則會在臨時文件的特殊操作系統目錄中創建該文件。 |
boolean exists() |
如果硬盤驅動器上存在同名文件,則返回真。 |
String getAbsolutePath() |
返回文件及其所有子目錄的完整路徑。 |
String getCanonicalPath() |
返回規範文件路徑。 例如,將路徑 «c:/dir/dir2/../a.txt» 轉換為 «c:/dir/a.txt» |
String[] list() |
返回當前對象表示的目錄中包含的文件名數組。 |
File[] listFiles() |
返回包含在當前 File 對象表示的目錄中的文件數組。 |
long getTotalSpace() |
返回文件所在磁盤上的總空間量(字節數)。 |
long getFreeSpace() |
返回文件所在磁盤上的可用空間量(字節數)。 |
boolean renameTo(File) |
重命名文件,即文件的內容實際上得到一個新名稱。換句話說,您可以將文件 «c:/dir/a.txt» 重命名為 «d:/out/text/b.doc»。 |
String getName() |
只返回沒有路徑的文件名。 |
String getParent() |
僅返回當前文件的路徑(目錄),不返回名稱本身。 |
Path toPath() |
返回對應於當前 File 對象的 Path 對象。 |
“哇!不是一個非常小的列表,是吧?而且你似乎可以用它做很多事情:創建和刪除文件,重命名它們,......”
“所以要獲取當前文件的目錄,我需要調用getParent()?”
“是的,但它返回一個字符串——文件路徑——而不是一個 File 對象。實際上,File 類幾乎複製了它的所有方法:一個版本返回一個字符串,另一個——一個 File 對象。檢查一下:”
File file = new File("c:/path/a.txt");
String directory = file.getParent();
File file = new File("c:/path/a.txt");
File directory = file.getParentFile();
如果您有一個帶有文件路徑的 String 並且您需要一個File對象,則使用構造函數。如果情況相反(你有一個File對象但你需要一個 String),那麼使用getAbsolutePath ()。例如:”
String path = "c:/a.txt";
File file = new File(path);
File file = new File("c:/a.txt");
String path = file.getAbsolutePath();
“知道了。”
“太好了。那麼給你一個小任務:顯示與當前文件位於同一目錄下的所有文件的名稱。”
“沒有比這更容易的了。看,看:”
//Some file
File originalFile = new File("c:/path/dir2/a.txt");
//An object representing the directory
File folder = originalFile.getParentFile();
//Print the file list on screen
for (File file : folder.listFiles())
{
System.out.println(file.getName());
}
“嗯。沒錯。”
“但有點令人困惑的是,同一個類——文件——同時用於文件和目錄。這對我來說似乎不太合邏輯。”
“由於歷史原因,它是這樣解決的。目錄曾經是磁盤上一個特殊的‘空’文件。當然,現在發生了很多變化,但不是全部。這就是我今天所擁有的。”
“感謝有趣的課程,Bilaabo。”
GO TO FULL VERSION