File類
一個(gè)File類的對(duì)象,表示了磁盤上的文件或目錄。
File類提供了與平臺(tái)無(wú)關(guān)的方法來(lái)對(duì)磁盤上的文件或目錄進(jìn)行操作。
------------
Java API:
------------
java.io
類 File
java.lang.Object
java.io.File
所有已實(shí)現(xiàn)的接口:
Serializable, Comparable<File>
public class File
extends Object
implements Serializable, Comparable<File>
文件和目錄路徑名的抽象表示形式。
用戶界面和操作系統(tǒng)使用與系統(tǒng)相關(guān)的路徑名字符串 來(lái)命名文件和目錄。此類呈現(xiàn)分層路徑名的一個(gè)抽象的、與系統(tǒng)無(wú)關(guān)的視圖。抽象路徑名 有兩個(gè)組件:
一個(gè)可選的與系統(tǒng)有關(guān)的前綴 字符串,比如盤符,"/" 表示 UNIX 中的根目錄,"\\\\" 表示 Microsoft Windows UNC 路徑名,以及
零個(gè)或更多字符串名稱 的序列。
除了最后一個(gè),抽象路徑名中的每個(gè)名稱代表一個(gè)目錄;最后一個(gè)名稱既可以代表目錄,也可以代表文件。空的 抽象路徑名沒(méi)有前綴和名稱序列。
路徑名字符串與抽象路徑名之間的轉(zhuǎn)換與系統(tǒng)有關(guān)。將抽象路徑名轉(zhuǎn)換為路徑名字符串時(shí),每個(gè)名稱與下一個(gè)名稱之間由單個(gè)默認(rèn)分隔符字符 隔開(kāi)。默認(rèn)名稱分隔符由系統(tǒng)屬性 file.separator 定義,也可以從此類的公共靜態(tài)字段 separator 和 separatorChar 中得到。將路徑名字符串轉(zhuǎn)換為抽象路徑名時(shí),可以使用默認(rèn)名稱分隔符或者受基礎(chǔ)系統(tǒng)支持的其他任何名稱分隔符來(lái)分隔其中的名稱。
無(wú)論是抽象路徑名還是字符串路徑名,都可以是絕對(duì) 路徑名或相對(duì) 路徑名。絕對(duì)路徑名是完整的路徑名,不需要任何其他信息就可以定位自身表示的文件。相反,相對(duì)路徑名必須使用來(lái)自其他路徑名的信息進(jìn)行解釋。默認(rèn)情況下,java.io 包中的類總是根據(jù)當(dāng)前用戶目錄來(lái)分析相對(duì)路徑名。此目錄由系統(tǒng)屬性 user.dir 指定,通常是 Java 虛擬機(jī)的調(diào)用目錄。
前綴的概念用于處理 UNIX 平臺(tái)的根目錄,以及 Microsoft Windows 平臺(tái)上的盤符、根目錄和 UNC 路徑名,如下所示:
對(duì)于 UNIX 平臺(tái),絕對(duì)路徑名的前綴始終是 "/"。相對(duì)路徑名沒(méi)有前綴。表示根目錄的絕對(duì)路徑名的前綴為 "/" 并且沒(méi)有名稱序列。
對(duì)于 Microsoft Windows 平臺(tái),包含盤符的路徑名的前綴由驅(qū)動(dòng)器名和一個(gè) ":" 組成:如果路徑名是絕對(duì)路徑名,后面可能跟著 "\\"。UNC 路徑名的前綴是 "\\\\";主機(jī)名和共享名是名稱序列中的前兩個(gè)名稱。沒(méi)有指定驅(qū)動(dòng)器的相對(duì)路徑名無(wú)前綴。
File 類的實(shí)例是不可變的;也就是說(shuō),一旦創(chuàng)建,F(xiàn)ile 對(duì)象表示的抽象路徑名將永不改變。
從以下版本開(kāi)始:
JDK1.0
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
構(gòu)造方法摘要
File(File parent, String child)
根據(jù) parent 抽象路徑名和 child 路徑名字符串創(chuàng)建一個(gè)新 File 實(shí)例。
File(String pathname)
通過(guò)將給定路徑名字符串轉(zhuǎn)換成抽象路徑名來(lái)創(chuàng)建一個(gè)新 File 實(shí)例。
File(String parent, String child)
根據(jù) parent 路徑名字符串和 child 路徑名字符串創(chuàng)建一個(gè)新 File 實(shí)例。
File(URI uri)
通過(guò)將給定的 file: URI 轉(zhuǎn)換成一個(gè)抽象路徑名來(lái)創(chuàng)建一個(gè)新的 File 實(shí)例。
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
1、創(chuàng)建文件和文件夾
------------
Java API:
------------
createNewFile
public boolean createNewFile()
throws IOException
當(dāng)且僅當(dāng)不存在具有此抽象路徑名指定的名稱的文件時(shí),原子地創(chuàng)建由此抽象路徑名指定的一個(gè)新的空文件。檢查文件是否存在,如果不存在則創(chuàng)建該文件,這是單個(gè)操作,對(duì)于其他所有可能影響該文件的文件系統(tǒng)活動(dòng)來(lái)說(shuō),該操作是原子的。
注:此方法不應(yīng) 用于文件鎖定,因?yàn)樗玫降膮f(xié)議可能無(wú)法可靠地工作。應(yīng)該使用 FileLock 機(jī)制替代。
返回:
如果指定的文件不存在并成功地創(chuàng)建,則返回 true;如果指定的文件已經(jīng)存在,則返回 false
拋出:
IOException - 如果發(fā)生 I/O 錯(cuò)誤
SecurityException - 如果存在安全管理器,且其 SecurityManager.checkWrite(java.lang.String) 方法拒絕對(duì)文件進(jìn)行寫入訪問(wèn)
從以下版本開(kāi)始:
1.2
-------------------------------------------------------------------------------
Demo1: FileDemo.java
創(chuàng)建一個(gè)文件,簡(jiǎn)單起見(jiàn),異常由JVM處理
-------------------------------------------------------------------------------
1import java.io.File;
2
3public class FileDemo {
4
5 public static void main(String[] args) throws Exception {
6 File f = new File("1.txt");
7 f.createNewFile();
8 }
9
10}
11-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
------------
Java API:
------------
mkdir
public boolean mkdir()
創(chuàng)建此抽象路徑名指定的目錄。
返回:
當(dāng)且僅當(dāng)已創(chuàng)建目錄時(shí),返回 true;否則返回 false
拋出:
SecurityException - 如果存在安全管理器,且其 SecurityManager.checkWrite(java.lang.String) 方法不允許創(chuàng)建指定的目錄
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
Demo2:在當(dāng)前文件夾中創(chuàng)建一個(gè)文件夾test
-------------------------------------------------------------------------------
1import java.io.File;
2
3public class FileDemo {
4
5 public static void main(String[] args) throws Exception {
6 File f = new File("test");
7 f.mkdir();
8 }
9}
10-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
Demo3:創(chuàng)建一個(gè)根目錄下的文件夾test
方法名:mkdir()
注意:'\'要使用轉(zhuǎn)義字符'\\'來(lái)代替
-------------------------------------------------------------------------------
1import java.io.File;
2
3public class FileDemo {
4
5 public static void main(String[] args) throws Exception {
6 File f = new File("c:\\test");
7 f.mkdir();
8 }
9}
10------------
Java API:
------------
mkdirs
public boolean mkdirs()
創(chuàng)建此抽象路徑名指定的目錄,包括創(chuàng)建必需但不存在的父目錄。注意,如果此操作失敗,可能已成功創(chuàng)建了一些必需的父目錄。
返回:
當(dāng)且僅當(dāng)已創(chuàng)建該目錄以及所有必需的父目錄時(shí),返回 true;否則返回 false
拋出:
SecurityException - 如果存在安全管理器,且其 SecurityManager.checkRead(java.lang.String) 方法不允許驗(yàn)證指定目錄和所有必需的父目錄是否存在;或者 SecurityManager.checkWrite(java.lang.String) 方法不允許創(chuàng)建指定的目錄和所有必需的父目錄
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
Demo4:創(chuàng)建一個(gè)根目錄下的文件夾test
方法名:mkdirs()
-------------------------------------------------------------------------------
1import java.io.File;
2
3public class FileDemo {
4
5 public static void main(String[] args) throws Exception {
6 File f = new File("c:\\test\\test\\test");
7 f.mkdir();
8 }
9
10}-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
Demo5:在當(dāng)前目錄下創(chuàng)建多級(jí)子目錄(注意格式,先文件名,再'\\')
如果是(\\test\\test)格式,則會(huì)在當(dāng)前文件所在的盤符的根目錄下創(chuàng)建目錄
-------------------------------------------------------------------------------
1import java.io.File;
2
3public class FileDemo {
4
5 public static void main(String[] args) throws Exception {
6 File f = new File("c:\\test\\test\\test");
7 f.mkdir();
8 }
9
10}
11
12-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
Demo6:直接在某特定目錄下新建文件
-------------------------------------------------------------------------------
1import java.io.File;
2
3public class FileDemo {
4
5 public static void main(String[] args) throws Exception {
6 File f = new File("c:\\test\\test\\1.txt");
7 f.createNewFile();
8 }
9
10}
11-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
2、創(chuàng)建跨平臺(tái)代碼
-------------------------------------------------------------------------------
字段摘要
static String pathSeparator
與系統(tǒng)有關(guān)的路徑分隔符字符,出于方便考慮,它被表示為一個(gè)字符串。
static char pathSeparatorChar
與系統(tǒng)有關(guān)的默認(rèn)路徑分隔符字符。
static String separator
與系統(tǒng)有關(guān)的默認(rèn)名稱分隔符,出于方便考慮,它被表示為一個(gè)字符串。
static char separatorChar
與系統(tǒng)有關(guān)的默認(rèn)名稱分隔符
-------------------------------------------------------------------------------
使用下面的構(gòu)造方法:
------------
Java API:
------------
File
public File(File parent,
String child)
根據(jù) parent 抽象路徑名和 child 路徑名字符串創(chuàng)建一個(gè)新 File 實(shí)例。
如果 parent 為 null,則創(chuàng)建一個(gè)新的 File 實(shí)例,這與調(diào)用給定 child 路徑名字符串的單參數(shù) File 構(gòu)造方法的效果一樣。
否則,parent 抽象路徑名用于表示目錄,而 child 路徑名字符串用于表示目錄或文件。如果 child 路徑名字符串是絕對(duì)路徑名,則用與系統(tǒng)有關(guān)的方式將它轉(zhuǎn)換成一個(gè)相對(duì)路徑名。如果 parent 是空抽象路徑名,則新的 File 實(shí)例是通過(guò)將 child 轉(zhuǎn)換成抽象路徑名并根據(jù)與系統(tǒng)有關(guān)的默認(rèn)目錄來(lái)分析結(jié)果而創(chuàng)建的。否則,將每個(gè)路徑名字符串轉(zhuǎn)換成一個(gè)抽象路徑名,并根據(jù)父抽象路徑名分析子抽象路徑名。
參數(shù):
parent - 父抽象路徑名
child - 子路徑名字符串
拋出:
NullPointerException - 如果 child 為 null
-------------------------------------------------------------------------------
Demo7:直接在某特定目錄下新建文件,而且是跨平臺(tái)的
-------------------------------------------------------------------------------
1import java.io.File;
2
3public class FileDemo {
4
5 public static void main(String[] args) throws Exception {
6 File fDir = new File(File.separator);
7 String strFile = "test" + File.separator
8 + "test" + File.separator
9 + "1.txt";
10 File f = new File(fDir, strFile);
11
12 f.createNewFile();
13 }
14
15}
16-------------------------------------------------------------------------------
運(yùn)行結(jié)果:在X:\test\test下創(chuàng)建了1.txt文件
-------------------------------------------------------------------------------
------------
Java API:
------------
delete
public boolean delete()
刪除此抽象路徑名表示的文件或目錄。如果此路徑名表示一個(gè)目錄,則此目錄必須為空才能刪除。
返回:
當(dāng)且僅當(dāng)成功刪除文件或目錄時(shí),返回 true;否則返回 false
拋出:
SecurityException - 如果存在安全管理器,且其 SecurityManager.checkDelete(java.lang.String) 方法拒絕對(duì)文件進(jìn)行刪除訪問(wèn)
3、刪除文件
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
Demo8:刪除某個(gè)文件
-------------------------------------------------------------------------------
1import java.io.File;
2
3public class FileDemo {
4
5 public static void main(String[] args) throws Exception {
6 File fDir = new File(File.separator);
7 String strFile = "test" + File.separator
8 + "test" + File.separator
9 + "1.txt";
10 File f = new File(fDir, strFile);
11
12 f.delete();
13 }
14
15}
16-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
------------
Java API:
------------
deleteOnExit
public void deleteOnExit()
在虛擬機(jī)終止時(shí),請(qǐng)求刪除此抽象路徑名表示的文件或目錄。僅在虛擬機(jī)正常終止時(shí),才會(huì)試圖執(zhí)行刪除操作,這在 Java Language Specification 中已定義。
一旦已經(jīng)請(qǐng)求執(zhí)行刪除操作,就無(wú)法取消該請(qǐng)求。所以應(yīng)小心使用此方法。
注:此方法不應(yīng) 用于文件鎖定,因?yàn)樗玫降膮f(xié)議可能無(wú)法可靠地工作。應(yīng)該使用 FileLock 設(shè)施替代。
拋出:
SecurityException - 如果存在安全管理器,且其 SecurityManager.checkDelete(java.lang.String) 方法拒絕對(duì)文件進(jìn)行刪除訪問(wèn)
從以下版本開(kāi)始:
1.2
另請(qǐng)參見(jiàn):
delete()
-------------------------------------------------------------------------------
Demo9:程序結(jié)束后刪除某個(gè)文件
-------------------------------------------------------------------------------
1import java.io.File;
2
3public class FileDemo {
4
5 public static void main(String[] args) throws Exception {
6 File fDir = new File(File.separator);
7 String strFile = "test" + File.separator
8 + "test" + File.separator
9 + "1.txt";
10 File f = new File(fDir, strFile);
11
12 f.createNewFile();
13
14 f.deleteOnExit();
15 Thread.sleep(3000); // 程序休眠3秒
16 }
17
18}
19-------------------------------------------------------------------------------
運(yùn)行結(jié)果:程序運(yùn)行,創(chuàng)建文件,然后休眠3秒,程序結(jié)束,刪除文件。
-------------------------------------------------------------------------------
4、創(chuàng)建臨時(shí)文件:
------------
Java API:
------------
createTempFile
public static File createTempFile(String prefix,
String suffix)
throws IOException
在默認(rèn)臨時(shí)文件目錄中創(chuàng)建一個(gè)空文件,使用給定前綴和后綴生成其名稱。調(diào)用此方法等同于調(diào)用 createTempFile(prefix, suffix, null)。
參數(shù):
prefix - 用于生成文件名的前綴字符串;至少必須是三個(gè)字符長(zhǎng)
suffix - 用于生成文件名的后綴字符串;可能是 null,在這種情況下,將使用后綴 ".tmp"
返回:
表示新創(chuàng)建的空文件的抽象路徑名
拋出:
IllegalArgumentException - 如果 prefix 參數(shù)包含少于三個(gè)的字符
IOException - 如果無(wú)法創(chuàng)建文件
SecurityException - 如果存在安全管理器,且其 SecurityManager.checkWrite(java.lang.String) 方法不允許創(chuàng)建文件
從以下版本開(kāi)始:
1.2
-------------------------------------------------------------------------------
Demo10:創(chuàng)建臨時(shí)文件
-------------------------------------------------------------------------------
1 import java.io.File;
2
3public class FileDemo {
4
5 public static void main(String[] args) throws Exception {
6 for( int i = 0; i < 5; i++){
7 File.createTempFile("tempfile", ".tmp");
8 }
9 }
10
11}-------------------------------------------------------------------------------
運(yùn)行結(jié)果:在默認(rèn)的Temp文件夾下創(chuàng)建5個(gè)臨時(shí)文件
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
Demo11:創(chuàng)建臨時(shí)文件,然后程序結(jié)束后刪除臨時(shí)文件
-------------------------------------------------------------------------------
1import java.io.File;
2
3public class FileDemo {
4
5 public static void main(String[] args) throws Exception {
6 for( int i = 0; i < 5; i++){
7 File f = File.createTempFile("tempfile", ".tmp");
8 f.deleteOnExit();
9 }
10 Thread.sleep(3000);
11 }
12
13}-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
5、list方法:
------------
Java API:
------------
list
public String[] list()
返回由此抽象路徑名所表示的目錄中的文件和目錄的名稱所組成字符串?dāng)?shù)組。
如果此抽象路徑名并不表示一個(gè)目錄,則此方法將返回 null。否則,為目錄中的每個(gè)文件或目錄返回一個(gè)字符串?dāng)?shù)組。表示目錄本身及其父目錄的名稱不包括在結(jié)果中。每個(gè)字符串是一個(gè)文件名,而不是一條完整路徑。
不保證所得數(shù)組中的相同字符串將以特定順序出現(xiàn),特別是不保證它們按字母順序出現(xiàn)。
返回:
由此抽象路徑名所表示的目錄中的文件和目錄的名稱所組成字符串?dāng)?shù)組。如果目錄為空,則數(shù)組也將為空。如果抽象路徑名不表示一個(gè)目錄,或者發(fā)生 I/O 錯(cuò)誤,則返回 null。
拋出:
SecurityException - 如果存在安全管理器,且其 SecurityManager.checkRead(java.lang.String) 方法拒絕對(duì)目錄進(jìn)行讀取訪問(wèn)
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
Demo12:列出文件夾下面的所有文件名和文件夾名
-------------------------------------------------------------------------------
1import java.io.File;
2
3public class FileDemo {
4
5 public static void main(String[] args) throws Exception {
6 File fDir = new File(File.separator);
7 String strFile = "test" + File.separator
8 + "test";
9 File f = new File(fDir, strFile);
10 String[] names = f.list();
11
12 for (int i = 0; i < names.length; i++) {
13 System.out.println(names[i]);
14 }
15 }
16
17}
18-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
6、過(guò)濾顯示文件
------------
Java API:
------------
list
public String[] list(FilenameFilter filter)
返回由包含在目錄中的文件和目錄的名稱所組成的字符串?dāng)?shù)組,這一目錄是通過(guò)滿足指定過(guò)濾器的抽象路徑名來(lái)表示的。此方法的行為與 list() 方法相同,除了所返回?cái)?shù)組中的字符串必須滿足過(guò)濾器。如果給定 filter 為 null,則接受所有名稱。否則,當(dāng)且僅當(dāng)在此抽象路徑名和它所表示的目錄中的文件名或目錄名上調(diào)用過(guò)濾器的 FilenameFilter.accept(java.io.File, java.lang.String) 方法返回 true 時(shí),該名稱才滿足過(guò)濾器。
參數(shù):
filter - 文件名過(guò)濾器
返回:
由此抽象路徑名所表示的目錄中的文件和目錄的字符串?dāng)?shù)組,該字符串被給定 filter 所接受。如果目錄為空,或者沒(méi)有名稱被過(guò)濾器接受,則該數(shù)組將為空。如果抽象路徑名不表示一個(gè)目錄,或者發(fā)生 I/O 錯(cuò)誤,則返回 null。
拋出:
SecurityException - 如果存在安全管理器,且其 SecurityManager.checkRead(java.lang.String) 方法拒絕對(duì)目錄進(jìn)行讀取訪問(wèn)
------------
Java API:
------------
java.io
接口 FilenameFilter
public interface FilenameFilter
實(shí)現(xiàn)此接口的類實(shí)例可用于過(guò)濾器文件名。Abstract Window Toolkit 的文件對(duì)話框組件使用這些實(shí)例過(guò)濾 File 類的 list 方法中的目錄清單。
從以下版本開(kāi)始:
JDK1.0
另請(qǐng)參見(jiàn):
FileDialog.setFilenameFilter(java.io.FilenameFilter), File, File.list(java.io.FilenameFilter)
方法摘要
boolean accept(File dir, String name)
測(cè)試指定文件是否應(yīng)該包含在某一文件列表中。
方法詳細(xì)信息
accept
boolean accept(File dir,
String name)
測(cè)試指定文件是否應(yīng)該包含在某一文件列表中。
參數(shù):
dir - 被找到的文件所在的目錄。
name - 文件的名稱。
返回:
當(dāng)且僅當(dāng)該名稱應(yīng)該包含在文件列表中時(shí)返回 true;否則返回 false。
-------------------------------------------------------------------------------
String的方法IndexOf的API:
------------
Java API:
------------
indexOf
public int indexOf(String str)
返回第一次出現(xiàn)的指定子字符串在此字符串中的索引。返回的整數(shù)是
this.startsWith(str, k)
為 true 的最小值 k。
參數(shù):
str - 任意字符串。
返回:
如果字符串參數(shù)作為一個(gè)子字符串在此對(duì)象中出現(xiàn),則返回第一個(gè)這樣的子字符串的第一個(gè)字符的索引;如果它不作為一個(gè)子字符串出現(xiàn),則返回 -1。
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
Demo13:列出文件夾下面的所有特定后綴名的文件名,如.java
1-------------------------------------------------------------------------------
2import java.io.*;
3
4public class FileDemo {
5
6 public static void main(String[] args) throws Exception {
7 File fDir = new File(File.separator);
8 String strFile = "test" + File.separator
9 + "test";
10 File f = new File(fDir, strFile);
11 String[] names = f.list(new FilenameFilter(){
12 public boolean accept(File dir, String name){
13 return name.indexOf(".java") != -1;
14 }
15 });
16
17 for (int i = 0; i < names.length; i++) {
18 System.out.println(names[i]);
19 }
20 }
21
22}
23-------------------------------------------------------------------------------
運(yùn)行結(jié)果:列出*.java文件
-------------------------------------------------------------------------------