使用File類操作文件或目錄屬性
java.io
包爲我們提供了一些接口和類,對文件進行基本的操作,包括對文件和目錄屬性的操作、對文件讀寫的操作等。
File類構造方法
如何使用File 類操作文件或目錄:
一個File 對象可以代表一個文件或目錄。利用它可以對文件或目錄進行基本操作。
//創建一個 File 對象的語法如下:
//pathName表示所指向的文件路徑名。
//下面這句代碼表示:在內存中構建一個對象,關聯了一個路徑而已,沒有真正
//操作本地系統去創建
File file = new File(String pathName);
//例如:創建一個指向C盤根目錄下的test.txt文件的對象
File file = new File("C:\\test.txt");
File file = new File("C:/test.txt");
注意:在 Windows 操作系統中,文件路徑名中的分隔符可以使用正斜槓/
;也可以用兩個反斜槓\\
File 類常用方法如下:
1.創建功能:
方法名稱 | 說明 |
---|---|
boolean createNewFile() |
創建指定名稱的空文件,不創建文件夾,如果路徑不存在則報錯 |
boolean mkdir() |
創建路徑,只能創建一層,多層則返回 false 創建失敗 |
boolean mkdirs() |
創建多層路徑,只能創建文件夾 |
2.刪除功能:
方法名稱 | 說明 |
---|---|
boolean delete() |
刪除此對象指定的文件或文件夾,文件夾不爲空則刪除失敗,返回false |
3.重命名功能:
方法名稱 | 說明 |
---|---|
boolean renameTo(File dest) |
重命名功能。如果目標路徑和原路徑一致,則改名。如果目標路徑和原路徑不一致,則剪切並改名 |
4.判斷功能:
方法名稱 | 說明 |
---|---|
boolean exists() |
判斷文件或文件夾是否存在 |
boolean isFile() |
判斷是否是文件 |
boolean isDirectory() |
判斷是否是文件夾 |
boolean canRead() |
判斷是否可讀 |
boolean canWrite() |
判斷是否可寫 |
boolean isHidden() |
判斷是否隱藏 |
boolean canExecute() |
判斷是否可執行 |
5.基本獲取功能:
方法名稱 | 說明 |
---|---|
String getPath() |
返回此對象表示的文件的相對路徑名:當前工程下的路徑 |
String getAbsolutePath() |
返回此對象表示的絕對路徑名:帶盤符的路徑 |
String getName() |
返回此對象表示的文件或文件夾的名稱 |
long length() |
返回文件的長度,單位爲字節,若文件不存在,則返回0L |
long lastModified() |
獲取最後修改時間 |
File getParentFile() |
獲取父路徑的 file 對象 |
6.高級獲取功能:
方法名稱 | 說明 |
---|---|
String[] list() |
獲取當前路徑下所有的文件的名字,返回 String 數組。此處無法分清獲取到的名字到底是一個文件還是一個文件夾 |
File[] listFiles() |
獲取當前文件下所有的文件封裝成一個 File 對象。這樣操作的好處是可以調用 File 類的功能進行文件的操作 |
例如:
package file_io;
import java.io.File;
import java.io.IOException;
public class FileMethods {
public static void main(String[] args) {
FileMethods fm = new FileMethods();
File file = new File("F:\\demo\\hello.txt");
fm.creat(file);
fm.showFileInfo(file);
// fm.delete(file);
}
/**
* 顯示文件信息
* @param file
* 文件對象
*/
public void showFileInfo(File file) {
if (file.exists()) { // 判斷文件或目錄是否存在
if (file.isFile()) {// 如果是文件
System.out.println("文件名:" + file.getName());
System.out.println("相對路徑:" + file.getPath());
System.out.println("絕對路徑:"
+ file.getAbsolutePath());
System.out.println("文件大小:"
+ file.length() + "字節");
}
if (file.isDirectory()) {
System.out.println("此文件是目錄");
}
} else {
System.out.println("文件不存在");
}
}
/**
* 創建文件的方法
* @param file
* 文件對象
*/
public void creat(File file) {
if (!file.exists()) {
try {
file.createNewFile();
System.out.println("文件創建成功!");
} catch (IOException e) {
e.printStackTrace();
}
} else {
System.out.println("文件已經存在!");
}
}
/**
* 刪除文件
* @param file
* 文件對象
*/
public void delete(File file) {
if (file.exists()) {
file.delete();
System.out.println("文件刪除成功!");
}
}
}
文件名稱過濾器的實現思想及代碼
//返回符合文件名稱要求的文件名稱 String數組
public String[] list(FilenameFilter filter)
//返回符合文件名稱要求的文件 File數組
public File[] listFiles(FilenameFilter filter)
具體實現如下:
1.自己寫個MyFilter
類 實現 FilenameFilter
接口
import java.io.File;
import java.io.FilenameFilter;
public class MyFilter implements FilenameFilter {
@Override
public boolean accept(File dir, String name) {
//dir->文件的父路徑
//name->文件名
//文件名篩選:如果以.jpg結尾則符合要求返回true
//else 返回false 不滿足要求
if (name.endsWith(".jpg")) {
return true;
}
return false;
}
}
2.實現篩選:
public static void main(String[] args) {
// file對象 指向目錄D:\\
File file = new File("D:\\");
// 調用 file.list(FilenameFilter filter) 方法
// FilenameFilter 是Java自帶的接口
//需要匿名對象來調用 即new MyFilter()
//返回 滿足要求的文件名字數組
String[] nameList = file.list(new MyFilter());
for (String name : nameList) {
System.out.println(name);
}
//同上 方法返回所有符合要求的文件 數組
File[] fs = file.listFiles(new MyFilter());
for (File f : fs) {
System.out.println(f.getName());
}
}
使用File刪除文件夾
目的:使用 File 刪除文件夾內所有內容+該文件夾
代碼如下:
import java.io.File;
public class DeleteFile {
public static void main(String[] args) {
//路徑千萬別寫成盤符根目錄,不然就啥都沒了,233
File file = new File("D:\\a");
del(file);
}
public static void del(File path) {
File[] fs = path.listFiles();
for (File f : fs) {
if (f.isFile()) {
System.out.println("文件->" + f.getName() +
" 已被刪除:" + f.delete());
} else {
System.out.println("進入了文件夾--->"
+ f.getName());
del(f);
}
}
System.out.println(path.getName() +
"->文件夾已被清空,執行刪除文件夾操作!" + path.delete());
}
}