1. 程式人生 > >FilesNameUtil獲取檔名稱工具類

FilesNameUtil獲取檔名稱工具類

借鑑網路資料整理而成

import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class FilesNameUtil {

    private static final String separator = File.separator; // 分隔符,windows是"\",linux是"/"

    public static void main(String[] args) {
        String filePath = "G:/測試";  // 檔案路徑
        String fileType = "xls"; // 檔案型別
//      System.err.println(getFileNameList(filePath)); // 獲取指定路徑下的所有檔名(單層)
//      System.err.println(getFileNameList(filePath, fileType)); // 獲取指定路徑下的指定型別的所有檔名(單層)
//      
        System.err.println(getFolderlList(filePath, null)); // 獲取指定目錄下的所有目錄(多層,全路徑)
//      System.err.println(getFileList(filePath, null)); // 獲取指定路徑下的所有檔案(多層)
//
//      System.err.println(getFileAbsolutePathList(filePath, null)); // 獲取指定路徑下的所有檔名(多層,絕對路徑)
        System.err.println(getFileAbsolutePathList(filePath, fileType, null)); // 獲取指定路徑下的所有指定型別檔案的全名稱(多層,絕對路徑)
    }

    /**
     * <h5>功能:</h5>獲取指定路徑下的所有檔名(單層)
     * @param filePath 檔案路徑(全路徑)
     * @return List<String>
     */
    public static List<String> getFileNameList(String filePath) {
        List<String> fileNamelist = new ArrayList<String>();
        File dir = new File(filePath);
        File[] files = dir.listFiles(); // 該檔案目錄下檔案全部放入陣列
        if (files != null) {
            for (int i = 0; i < files.length; i++) {
                String fileName = files[i].getName(); // 獲取檔名
                if (files[i].isDirectory() == false) { // 判斷是檔案還是資料夾
                    System.out.println(fileName);
                    fileNamelist.add(fileName);
                }
            }
        }
        return fileNamelist;
    }

    /**
     * <h5>功能:</h5>獲取指定路徑下的指定型別的所有檔名(單層)
     * @param filePath 檔案路徑(全路徑)
     * @param fileType 檔案型別
     * @return List<String>
     */
    public static List<String> getFileNameList(String filePath,String fileType) {
        List<String> fileNamelist = new ArrayList<String>();
        File dir = new File(filePath);
        File[] files = dir.listFiles(); // 該檔案目錄下檔案全部放入陣列
        if (files != null) {
            for (int i = 0; i < files.length; i++) {
                String fileName = files[i].getName(); // 獲取檔名
                // 判斷是檔案還是資料夾,並且是否是指定型別的檔案
                if (files[i].isDirectory() == false && fileName.endsWith(fileType)) {
                    System.out.println(fileName);
                    fileNamelist.add(fileName);
                }
            }
        }
        return fileNamelist;
    }

    /**
     * <h5>功能:</h5>獲取指定目錄下的所有目錄(多層,全路徑)
     * @param filePath
     * @param filelist
     * @return List<String>
     */
    public static List<String> getFolderlList(String filePath,List<String> folderllist) {
        if (null == folderllist) {
            folderllist = new ArrayList<String>();
        }
        File dir = new File(filePath);
        File[] files = dir.listFiles(); // 該檔案目錄下檔案全部放入陣列
        if (files != null) {
            for (int i = 0; i < files.length; i++) {
                if (files[i].isDirectory()) { // 判斷是檔案還是資料夾
                     String fileAbsolutePath = files[i].getAbsolutePath();
                     System.out.println("---" + fileAbsolutePath);
                     folderllist.add(fileAbsolutePath);
                     getFolderlList(fileAbsolutePath,folderllist); // 獲取檔案絕對路徑
                }
            }
        }
        return folderllist;
    }

    /**
     * <h5>功能:</h5>獲取指定路徑下的所有檔案(多層)
     * @param filePath 指定檔案路徑
     * @return List<File>
     */
    public static List<File> getFileList(String filePath,List<File> filelist) {
        if (null == filelist) {
            filelist = new ArrayList<File>();
        }
        File dir = new File(filePath);
        File[] files = dir.listFiles(); // 該檔案目錄下檔案全部放入陣列
        if (files != null) {
            for (int i = 0; i < files.length; i++) {
                String fileAbsolutePath = files[i].getAbsolutePath(); // 獲取檔案絕對路徑
                if (files[i].isDirectory()) { // 判斷是檔案還是資料夾
                    getFileList(fileAbsolutePath,filelist);
                } else {
                    System.out.println("---" + fileAbsolutePath);
                    filelist.add(files[i]);
                }
            }
        }
        return filelist;
    }

    /**
     * <h5>功能:</h5>獲取指定路徑下的所有檔名(多層,絕對路徑)
     * @param filePath 指定檔案路徑
     * @return List<String>
     */
    public static List<String> getFileAbsolutePathList(String filePath,List<String> filelist) {
        if (null == filelist) {
            filelist = new ArrayList<String>();
        }
        File dir = new File(filePath);
        File[] files = dir.listFiles(); // 該檔案目錄下檔案全部放入陣列
        if (files != null) {
            for (int i = 0; i < files.length; i++) {
                String fileAbsolutePath = files[i].getAbsolutePath(); // 獲取檔案絕對路徑
                if (files[i].isDirectory()) { // 判斷是檔案還是資料夾
                    getFileAbsolutePathList(fileAbsolutePath,filelist);
                } else {
                    System.out.println("---" + fileAbsolutePath);
                    filelist.add(fileAbsolutePath);
                }
            }
        }
        return filelist;
    }

    /**
     * <h5>功能:</h5>獲取指定路徑下的所有指定型別檔案的全名稱(多層,絕對路徑)
     * @param filePath 指定檔案路徑
     * @param fileType 檔案型別
     * @param filelist 用來存放資料的集合
     * @return List<String>
     */
    public static List<String> getFileAbsolutePathList(String filePath,String fileType,List<String> filelist) {
        if (null == filelist) {
            filelist = new ArrayList<String>();
        }
        File dir = new File(filePath);
        File[] files = dir.listFiles(); // 該檔案目錄下檔案全部放入陣列
        if (files != null) {
            for (int i = 0; i < files.length; i++) {
                String fileName = files[i].getName(); // 獲取檔名
                String fileAbsolutePath = files[i].getAbsolutePath(); // 獲取檔案絕對路徑
                if (files[i].isDirectory()) { // 判斷是檔案還是資料夾
                    getFileAbsolutePathList(fileAbsolutePath,fileType,filelist); // 獲取檔案絕對路徑
                } else if (fileName.endsWith(fileType)) {
                    System.out.println("---" + fileAbsolutePath);
                    filelist.add(fileAbsolutePath);
                }
            }
        }
        return filelist;
    }

    /**
     * 通過檔案路徑直接修改檔名
     * @param filePath 需要修改的檔案的完整路徑
     * @param newFileName 需要修改的檔案的名稱
     * @return
     */
    public static String FixFileName(String filePath, String newFileName) {
        File f = new File(filePath);
        if (!f.exists()) { // 判斷原檔案是否存在
            return null;
        }

        newFileName = newFileName.trim();
        if ("".equals(newFileName) || newFileName == null) // 檔名不能為空
            return null;

        String newFilePath = null;
        if (f.isDirectory()) { // 判斷是否為資料夾
            newFilePath = filePath.substring(0, filePath.lastIndexOf(separator)) + separator + newFileName;
        } else {
            newFilePath = filePath.substring(0, filePath.lastIndexOf(separator))+ separator  + newFileName + filePath.substring(filePath.lastIndexOf("."));
        }
        File nf = new File(newFilePath);
        if (!f.exists()) { // 判斷需要修改為的檔案是否存在(防止檔名衝突)
            return null;
        }

        try {
            f.renameTo(nf); // 修改檔名
        } catch(Exception err) {
            err.printStackTrace();
            return null;
        }

        return newFilePath;
    }
}