JavaIO之File類

在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












發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章