在java.io包下,File類是唯一與文件本身操作:如刪除文件、創建文件、取得文件信息有關的程序類。
1. File類的實例化對象
實例化File類對象主要用到兩個構造方法:
(1)根據絕對路徑實例化File類對象:
public File(String pathname)
(2)根據父路徑和子路徑實例化File類對象:
public File(String parent, String child)
在對任何文件進行刪除、創建、取得文件信息操作前,均需要先實例化File類對象,該對象表示要操作的文件。
2. 創建新文件
public boolean createNewFile() throws IOException
通過實例化File類對象調用createNewFile()方法從而創建指定路徑的文件,代碼演示如下:
package www.bit.java.test;
import java.io.File;
public class Test {
public static void main(String[] args) {
//定義要操作的文件路徑
File file=new File("C:\\Users\\Administrator\\Desktop\\Test.txt");
try {
//創建新文件
file.createNewFile();
} catch (Exception e) {
e.printStackTrace();
}
}
}
運行結果爲:在指定路徑(如:C:\Users\Administrator\Desktop)下創建新文件Test.txt
故,創建文件的步驟爲:先需要定義要操作(創建)的文件的File類對象,再通過該File類對象去操作(創建)該文件。
3. 判斷文件是否存在
public boolean exists()
該方法用於判斷File類對象對應的文件是否存在?演示如下:
package www.bit.java.test;
import java.io.File;
public class Test {
public static void main(String[] args) {
// 定義要操作的文件路徑
File file = new File("C:\\Users\\Administrator\\Desktop\\Test.txt");
// 判斷文件Test.txt是否存在
System.out.println(file.exists());
}
}
運行結果爲:true
4. 刪除文件
public boolean delete()
該方法用於刪除File類對象對應的文件,演示如下:package www.bit.java.test;
import java.io.File;
public class Test {
public static void main(String[] args) {
// 定義要操作的文件路徑
File file = new File("C:\\Users\\Administrator\\Desktop\\Test.txt");
// 刪除文件Test.txt
//在刪除文件前需要判斷該文件是否存在
if(file.exists())
{
file.delete();
}
}
}
需要注意的是,在刪除前最好判斷該文件是否存在,這樣使得程序更加符合邏輯,但不判定也不會出現任何異常!
以上實現了文件的簡單處理操作,但是代碼存在一個問題:
關於路徑的格式問題。在Windows下的路徑爲:C:\Users\Administrator\Desktop\Test.txt,而在Linux下的路徑爲:C:/Users/Administrator/Desktop/Test.txt。這就有可能出現實際項目部署環境與開發環境不同的問題,所以在使用路徑分隔符上一般採用File類的一個常量: public static final String separator 來描述。故使用該常量表示路徑的分隔符,代碼演示如下:
package www.bit.java.test;
import java.io.File;
import java.io.IOException;
public class Test {
public static void main(String[] args) {
// 定義要操作的文件路徑,使用File類的常量separator
File file = new File("C:"+File.separator+"Users"+File.separator
+"Administrator"+File.separator+"Desktop"+File.separator+"Test.txt");
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
}
5. 關於目錄的操作
(1)取得父路徑
public String getParent()
(2)取得父路徑的File類對象
public File getParentFile()
(3)創建目錄(無論有多少級目錄都會創建,都會創建)
public boolean mkdirs()
對以上三個方法進行代碼演示:
package www.bit.java.test;
import java.io.File;
import java.io.IOException;
public class Test {
public static void main(String[] args) throws IOException {
// 定義要操作的文件路徑,使用File類的常量separator
File file = new File("C:"+File.separator+"Users"+File.separator+"Administrator"
+File.separator+"Desktop"+File.separator+"Test"+File.separator+"MyFile.txt");
//獲取父路徑
System.out.println(file.getParent());
//獲取父路徑的File類對象
File parentFile=file.getParentFile();
file.mkdirs();
}
}
運行結果爲:C:\Users\Administrator\Desktop\Test,因爲C:\Users\Administrator\Desktop\Test\MyFile.txt的父路徑就是它,並且取得了其父路徑的File類對象。在運行結束後,在桌面上創建了Test文件夾以及在其文件夾內也創建了MyFile.txt文件夾。故需要注意,當不想要MyFile.txt也創建爲文件夾,就需要在其父路徑的File類對象上調用mkdirs()方法,之後再調用createNewFile()方法去創建文件。故,將上述代碼修改如下:
package www.bit.java.test;
import java.io.File;
import java.io.IOException;
public class Test {
public static void main(String[] args) throws IOException {
// 定義要操作的文件路徑,使用File類的常量separator
File file = new File("C:"+File.separator+"Users"+File.separator+"Administrator"
+File.separator+"Desktop"+File.separator+"Test"+File.separator+"MyFile.txt");
//獲取父路徑
System.out.println(file.getParent());
//獲取父路徑的File類對象
File parentFile=file.getParentFile();
//先創建其父路徑爲目錄
parentFile.mkdirs();
//再創建具體文件
file.createNewFile();
}
}
6. 取得文件信息
(1)判斷路徑是否爲文件
public boolean isFile()
(2)判斷路徑是否爲目錄
public boolean isDirectory()
(3)取得文件大小(單位爲字節)
public long length()
(4)最後一次修改文件日期
public long lastModified()
調用以上方法進行代碼演示:
package www.bit.java.test;
import java.io.File;
import java.io.IOException;
public class Test {
public static void main(String[] args) throws IOException {
// 定義要操作的文件路徑,使用File類的常量separator
File file = new File("C:"+File.separator+"Users"+File.separator+"Administrator"
+File.separator+"Desktop"+File.separator+"Test"+File.separator+"MyFile.txt");
//調用isDirectory()方法
System.out.println("判斷是否爲目錄:"+file.isDirectory());
//調用exists()方法以及isFile()方法
if(file.exists()&&file.isFile())
{
//調用length()方法
System.out.println("文件大小:"+file.length());
//調用lastModified()方法
System.out.println("最後修改日期:"+file.lastModified());
}
}
}
運行結果如下:
判斷是否爲目錄:false
文件大小:43
最後修改日期:1526998596614
此時你會發現,日期打印的是一串數字,根本無法判斷具體是什麼日期,這是需要用到Date類以及關於日期格式的SimpleDateFormat類,添加代碼如下:
SimpleDateFormat format=new SimpleDateFormat("yy年MM月dd日 HH:mm:ss");
Date date=new Date(file.lastModified());
String msg=format.format(date);
System.out.println("日期:"+msg);
運行結果如下:
日期:18年05月22日 22:16:36
7. 列出目錄中的全部組成
public File[] listFiles()
代碼演示如下所示:
package www.bit.java.test;
import java.io.File;
public class Test {
public static void main(String[] args){
// 定義要操作的文件路徑,使用File類的常量separator
File file = new File("C:"+File.separator+"Users"+File.separator+"Administrator"+File.separator+"Desktop");
//在列出當前目錄的所有組成前,先判斷當前目錄是否存在
if(file.exists()&&file.isDirectory())
{
//列出目錄中的全部內容
File[] result=file.listFiles();
for (File file2 : result) {
System.out.println(file2);
}
}
}
}
運行結果爲Destop目錄下的全部組成,如下所示:
C:\Users\Administrator\Desktop\desktop.ini
C:\Users\Administrator\Desktop\eclipse.lnk
C:\Users\Administrator\Desktop\Internet Explorer.lnk
C:\Users\Administrator\Desktop\lingo11
C:\Users\Administrator\Desktop\matlab.lnk
C:\Users\Administrator\Desktop\SQL Server Management Studio.lnk
C:\Users\Administrator\Desktop\stats.lnk
C:\Users\Administrator\Desktop\sublime_text.lnk
C:\Users\Administrator\Desktop\Test