兩種方法,
一種是得到所有的filename進行判斷,符合條件的就輸出;
另一種是在得到filename的同時通過過濾器FilenameFilter,得到符合條件的file
方法一,得到filename再判斷
/*
* 判斷E盤目錄下是否有後綴名爲.py的文件,如果有,就輸出此文件名稱
*
* 分析:
* A:封裝e判斷目錄
* B:獲取該目錄下所有文件或者文件夾的File數組
* C:遍歷該File數組,得到每一個File對象,然後判斷
* D:是否是文件
* 是:繼續判斷是否以.py結尾
* 是:就輸出該文件名稱
* 否:不搭理它
* 否:不搭理它
*/
public class FileDemo {
public static void main(String[] args) {
// 封裝e判斷目錄
File file = new File("e:\\");
// 獲取該目錄下所有文件或者文件夾的File數組
File[] files = file.listFiles();
// 遍歷該File數組,得到每一個File對象,然後判斷
for (File file2 : files) {
//System.out.println(file2.getName());
if(file2.isFile()){
if(file2.getName().endsWith(".py")){
System.out.println(file2.getName());
}
}
}
}
}
方法二 在得到filename的過程中過濾掉不符合條件的file
使用方法二必須學習一個接口:文件名稱過濾器和文件過濾器
listFiles
public File[] listFiles(FileFilter filter)
public File[] listFiles(FilenameFilter filter)
list
public String[] list(FilenameFilter filter)
一:文件名過濾器FilenameFilter中有accept()方法
accept
boolean accept(File dir,
String name)
測試指定文件是否應該包含在某一文件列表中。
參數:
dir
- 被找到的文件所在的目錄。
name
- 文件的名稱。
返回:
當且僅當該名稱應該包含在文件列表中時返回 true
;否則返回 false
。
import java.io.File;
import java.io.FilenameFilter;
/*
* 判斷E盤目錄下是否有後綴名爲.jpg的文件,如果有,就輸出此文件名稱
* A:先獲取所有的,然後遍歷的時候,依次判斷,如果滿足條件就輸出。
* B:獲取的時候就已經是滿足條件的了,然後輸出即可。
*
* 要想實現這個效果,就必須學習一個接口:文件名稱過濾器
* public String[] list(FilenameFilter filter)
* public File[] listFiles(FilenameFilter filter)
*/
public class FileDemo2 {
public static void main(String[] args) {
// 封裝e判斷目錄
File file = new File("e:\\java");
// 獲取該目錄下所有文件或者文件夾的String數組
// public String[] list(FilenameFilter filter)
String[] strArray = file.list(new FilenameFilter() {
@Override
//這裏的File dir是---被找到的文件所在的目錄
//name - 文件的名稱。
public boolean accept(File dir, String name) {
// 通過這個測試,我們就知道了,到底把這個文件或者文件夾的名稱加不加到數組中,取決於這裏的返回值是true還是false
// 所以,這個的true或者false應該是我們通過某種判斷得到的
System.out.println(dir + "---" + name);
// File file = new File(dir, name);
// // System.out.println(file);
// boolean flag = file.isFile();
// boolean flag2 = name.endsWith(".jpg");
// return flag && flag2;
// return new File(dir, name).isFile() && name.endsWith(".py");
return false;
// return true;
}
});
// 遍歷
for (String s : strArray) {
System.out.println(s);
}
}
}
二:文件過濾器中也有accept()方法
accept
boolean accept(File pathname)
測試指定抽象路徑名是否應該包含在某個路徑名列表中。
參數:
pathname
- 要測試的抽象路徑名
返回:
當且僅當應該包含 pathname
時返回 true
具體實現代碼
import java.io.File;
import java.io.FileFilter;
/*
* 判斷E盤目錄下是否有後綴名爲.html的文件,如果有,就輸出此文件名稱
* A:先獲取所有的,然後遍歷的時候,依次判斷,如果滿足條件就輸出。
* B:獲取的時候就已經是滿足條件的了,然後輸出即可。
*
* 要想實現這個效果,就必須學習一個接口:文件名稱過濾器
* public String[] list(FilenameFilter filter)
* public File[] listFiles(FilenameFilter filter)
* public File[] listFiles(FileFilter filter)
*/
public class FileDemo3 {
public static void main(String[] args) {
// 封裝e判斷目錄
File file = new File("e:\\java");
//獲得e:\java目錄下所有經過過濾器篩選的File對象
File[] strArray = file.listFiles(new FileFilter() {
@Override
//這裏的File參數是e:\java的所有File對象
public boolean accept(File file) {
// return false;
// return true;
// 通過這個測試,我們就知道了,到底把這個文件或者文件夾的名稱加不加到數組中,取決於這裏的返回值是true還是false
// 所以,這個的true或者false應該是我們通過某種判斷得到的
System.out.println(file + ""+file.isFile());
// // System.out.println(file);
// boolean flag = file.isFile();
// boolean flag2 = name.endsWith(".html");
// return flag && flag2;
// return file.isFile() && file.getName().endsWith(".html");
// return file.getName().endsWith(".html");
return false;
}
});
// 遍歷
for (File file2 : strArray) {
System.out.println(file2.getName());
}
}
}