一下是代碼:
import java.io.File;
public class test {
public static void main(String[] args) {
// 這是需要獲取的文件夾路徑
String path = "D:/changba20180127/music/";
getFile(path, 0);
}
/*
* 函數名:getFile 作用:使用遞歸,輸出指定文件夾內的所有文件 參數:path:文件夾路徑 deep:表示文件的層次深度,控制前置空格的個數
* 前置空格縮進,顯示文件層次結構
*/
private static void getFile(String path, int deep) {
// 獲得指定文件對象
File file = new File(path);
// 獲得該文件夾內的所有文件
File[] array = file.listFiles();
for (int i = 0; i < array.length; i++) {
if (array[i].isFile())// 如果是文件
{
// for (int j = 0; j < deep; j++)//輸出前置空格
// System.out.print(" ");
if (accept(array[i], array[i].getName())) {
String name = array[i].getName();
// 只輸出文件名字 TODO
System.out.println(name + "----");
//修改後的名字
// int indexOf = name.indexOf(" (1).mp3");
// String remeName = name.substring(0,indexOf)+".mp3";
// System.out.println(remeName);
// array[i].renameTo(new File("D:/changba20180127/original/"
// + remeName ));
} else {
System.out.println("==============");
}
// 輸出當前文件的完整路徑
// System.out.println("#####" + array[i]);
// 同樣輸出當前文件的完整路徑 大家可以去掉註釋 測試一下
// System.out.println(array[i].getPath());
} else if (array[i].isDirectory())// 如果是文件夾
{
for (int j = 0; j < deep; j++)
// 輸出前置空格
System.out.print(" ");
System.out.println(array[i].getName());
// System.out.println(array[i].getPath());
// 文件夾需要調用遞歸 ,深度+1
getFile(array[i].getPath(), deep + 1);
}
}
}
// 重寫accept方法,測試指定文件是否應該包含在某一文件列表中
public static boolean accept(File dir, String name) {
// TODO Auto-generated method stub
// 創建返回值
boolean flag = true;
// 定義篩選條件
// endWith(String str);判斷是否是以指定格式結尾的
if (name.toLowerCase().endsWith(".jpg")) {
} else if (name.toLowerCase().endsWith(".txt")) {
} else if (name.toLowerCase().endsWith("(1).mp3")) {
flag = true;
} else {
flag = false;
}
// 返回定義的返回值
// 當返回true時,表示傳入的文件滿足條件
return flag;
}
}
設置搜索規則的函數是 accept() 中的判斷條件。
這裏稍微提一下一下兩個函數:
startsWith方法測試此字符串從指定索引開始的子字符串是否以指定前綴開始。
endsWith方法測試此字符串從指定索引開始的子字符串是否以指定尾綴結束。