File類
Java文件類以抽象的方式代表文件名和目錄路徑名早龟,該類主要用于文件和目錄的創(chuàng)建、文件的查找和文件的刪除等
File
對象代表磁盤中實際存在的文件和目錄步清。通過以下構(gòu)造方法創(chuàng)建一個File
對象
File類的構(gòu)造函數(shù)
image.png
演示代碼:
import java.io.File;
public class Test {
public static void main(String[] args) {
// 根據(jù)給定路徑字符串創(chuàng)建
String pathName = "f:\\a\\b\\hello.java";
// 將文件封裝成File對象辆它,注意:有不存在的文件變成對象
File file = new File(pathName);
System.out.println(file);
// 根據(jù)父路徑和子路徑創(chuàng)建
String father = "f:\\a\\b";
String son = "hello.java";
File file2 = new File(father, son);
System.out.println(file2);
// 根據(jù)父路徑封裝的對象和子路徑
String father2 = "f:\\a\\b";
File file3 = new File(father2);
String son2 = "hello.java";
File file4 = new File(file3, son2);
System.out.println(file4);
}
}
File類的獲取
image.png
import java.io.File;
public class Test1 {
public static void main(String[] args) {
// 創(chuàng)建文件對象
File file = new File("test.java");
// 獲取文件的絕對路徑
String absPath = file.getAbsolutePath();
System.out.println(absPath); // F:\workspace\day22\test.java
// 獲取封裝路徑,File中封裝是什么路徑就獲得什么
String path = file.getPath();
System.out.println(path); // test.java
// 獲取文件名
String fileName = file.getName();
System.out.println(fileName); // test.java
// 獲取大小
long size = file.length();
System.out.println(size); // 0
}
}
文件和文件夾的創(chuàng)建刪
image.png
import java.io.File;
import java.io.IOException;
public class Test2 {
public static void main(String[] args) throws IOException {
File file = new File("e:\\test.txt");
// 創(chuàng)建文件,如果文件不存在創(chuàng)建返回true;存在返回false
boolean b1 = file.createNewFile();
// 刪除文件
boolean b2 = file.delete();
// 判斷文件是否存在
boolean b3 = file.exists();
// 創(chuàng)建目錄
File dir = new File("e:\\a\\b\\c");
boolean b4 = dir.mkdir();
// 判斷文件還是目錄,必須先判斷是否存在
File file2 = new File("e:\\a\\b\\c");
boolean b5 = file2.isFile();
boolean b6 = file2.isDirectory();
}
}
目錄
文件都存放在目錄(文件夾)中,那么如何獲取一個目錄中的所有文件或者目錄中的文件夾呢堡赔?那么我們先想想,一個目錄中可能有多個文件或者文件夾设联,那么如果File中有功能獲取到一個目錄中的所有文件和文件夾加匈,那么功能得到的結(jié)果要么是數(shù)組,要么是集合
import java.io.File;
public class Test4 {
public static void main(String[] args) {
File dir = new File("f:\\workspace");
// 獲取目錄下的文件及文件夾名稱
String[] names = dir.list();
for(String name: names){
System.out.println(name);
}
// 獲取目錄下的文件對象
File[] files = dir.listFiles();
for(File file: files){
System.out.println(file);
}
}
}
文件過濾器
通過listFiles()
方法仑荐,我們可以獲取到一個目錄下的所有文件和文件夾,但能不能對其進行過濾呢纵东?比如我們只想要一個目錄下的指定擴展名的文件粘招,或者包含某些關(guān)鍵字的文件夾呢?
我們是可以先把一個目錄下的所有文件和文件夾獲取到偎球,并遍歷當前獲取到所有內(nèi)容洒扎,遍歷過程中在進行篩選辑甜,但是這個動作有點麻煩,Java給我們提供相應的功能來解決這個問題
File
類中重載的listFile
方法袍冷,并指定過濾器
image.png
image.png
獲取擴展名為.java
的所有文件
public class Test {
public static void main(String[] args) {
// 獲取擴展名為.java所有文件
// 創(chuàng)建File對象
File file = new File("E:\\code\\day11_code");
// 獲取指定擴展名的文件,由于要對所有文件進行擴展名篩選磷醋,
// 因此調(diào)用方法需要傳遞過濾器
File[] files = file.listFiles(new MyFileFilter());
// 遍歷獲取到的所有符合條件的文件
for (File f : files) {
System.out.println(f);
}
}
過濾器
// 定義類實現(xiàn)文件名稱FilenameFilter過濾器
class MyFileFilter implements FilenameFilter{
public boolean accept(File dir, String name) {
return name.endsWith(".java");
}
}
遞歸打印所有子目錄中的文件路徑
編寫一個方法用來打印指定目錄中的文件路徑,并進行方法的調(diào)用
要求:若指定的目錄有子目錄胡诗,那么把子目錄中的文件路徑也打印出來
import java.io.File;
public class Test6 {
public static void main(String[] args) {
File file = new File("f:\\workspace");
getAllfile(file);
}
public static void getAllfile(File file) {
File[] files = file.listFiles();
// 遍歷當前目錄下所有文件和文件夾
for(File f:files){
// 判斷當前遍歷的是否為目錄
if(f.isDirectory()){
// 是目錄,繼續(xù)獲取這個目錄下的所在文件和文件夾
getAllfile(f);
}else{
// 不是目錄邓线,打印出來
System.out.println(f);
}
}
}
}
搜索指定目錄中的.java文件(含子目錄)
只需要在listFiles(new FilenameFilter)
添加一個過濾器