在計算機系統中,檔案是非常重要的存儲方式。Java的标準庫
java.io
提供了
File
對象來操作檔案和目錄。
要構造一個
File
對象,需要傳入檔案路徑:
import java.io.*;
Run
構造File對象時,既可以傳入絕對路徑,也可以傳入相對路徑。絕對路徑是以根目錄開頭的完整路徑,例如:
File f = new File("C:Windowsnotepad.exe");
注意Windows平台使用
作為路徑分隔符,在Java字元串中需要用
表示一個
。Linux平台使用
/
作為路徑分隔符:
File f = new File("/usr/bin/javac");
傳入相對路徑時,相對路徑前面加上目前目錄就是絕對路徑:
// 假設目前目錄是C:Docs
File f1 = new File("subjavac"); // 絕對路徑是C:Docssubjavac
File f3 = new File(".subjavac"); // 絕對路徑是C:Docssubjavac
File f3 = new File("..subjavac"); // 絕對路徑是C:subjavac
可以用
.
表示目前目錄,
..
表示上級目錄。
File對象有3種形式表示的路徑,一種是
getPath()
,傳回構造方法傳入的路徑,一種是
getAbsolutePath()
,傳回絕對路徑,一種是
getCanonicalPath
,它和絕對路徑類似,但是傳回的是規範路徑。
什麼是規範路徑?我們看以下代碼:
import java.io.*;
Run
絕對路徑可以表示成
C:WindowsSystem32..notepad.exe
,而規範路徑就是把
.
和
..
轉換成标準的絕對路徑後的路徑:
C:Windowsnotepad.exe
。
因為Windows和Linux的路徑分隔符不同,File對象有一個靜态變量用于表示目前平台的系統分隔符:
System.out.println(File.separator); // 根據目前平台列印""或"/"
檔案和目錄
File
對象既可以表示檔案,也可以表示目錄。特别要注意的是,構造一個
File
對象,即使傳入的檔案或目錄不存在,代碼也不會出錯,因為構造一個
File
對象,并不會導緻任何磁盤操作。隻有當我們調用
File
對象的某些方法的時候,才真正進行磁盤操作。
例如,調用
isFile()
,判斷該
File
對象是否是一個已存在的檔案,調用
isDirectory()
,判斷該
File
對象是否是一個已存在的目錄:
import java.io.*;
Run
用
File
對象擷取到一個檔案時,還可以進一步判斷檔案的權限和大小:
-
:是否可讀;boolean canRead()
-
:是否可寫;boolean canWrite()
-
:是否可執行;boolean canExecute()
-
:檔案位元組大小。long length()
對目錄而言,是否可執行表示能否列出它包含的檔案和子目錄。
建立和删除檔案
當File對象表示一個檔案時,可以通過
createNewFile()
建立一個新檔案,用
delete()
删除該檔案:
File file = new File("/path/to/file");
if (file.createNewFile()) {
// 檔案建立成功:
// TODO:
if (file.delete()) {
// 删除檔案成功:
}
}
有些時候,程式需要讀寫一些臨時檔案,File對象提供了
createTempFile()
來建立一個臨時檔案,以及
deleteOnExit()
在JVM退出時自動删除該檔案。
import java.io.*;
Run
周遊檔案和目錄
當File對象表示一個目錄時,可以使用
list()
和
listFiles()
列出目錄下的檔案和子目錄名。
listFiles()
提供了一系列重載方法,可以過濾不想要的檔案和目錄:
import java.io.*;
Run
和檔案操作類似,File對象如果表示一個目錄,可以通過以下方法建立和删除目錄:
-
:建立目前File對象表示的目錄;boolean mkdir()
-
:建立目前File對象表示的目錄,并在必要時将不存在的父目錄也建立出來;boolean mkdirs()
-
:删除目前File對象表示的目錄,目前目錄必須為空才能删除成功。boolean delete()
Path
Java标準庫還提供了一個
Path
對象,它位于
java.nio.file
包。
Path
對象和
File
對象類似,但操作更加簡單:
import java.io.*;
import java.nio.file.*;
Run
如果需要對目錄進行複雜的拼接、周遊等操作,使用
Path
對象更友善。
練習
請利用
File
對象列出指定目錄下的所有子目錄和檔案,并按層次列印。
例如,輸出:
Documents/
word/
1.docx
2.docx
work/
abc.doc
ppt/
other/
如果不指定參數,則使用目前目錄,如果指定參數,則使用指定目錄。
下載下傳練習:io-file (推薦使用IDE練習插件快速下載下傳)
小結
Java标準庫的
java.io.File
對象表示一個檔案或者目錄:
- 建立
對象本身不涉及IO操作;File
- 可以擷取路徑/絕對路徑/規範路徑:
/getPath()
/getAbsolutePath()
;getCanonicalPath()
- 可以擷取目錄的檔案和子目錄:
/list()
;listFiles()
- 可以建立或删除檔案和目錄。