FileUtils工具类
生活随笔
收集整理的這篇文章主要介紹了
FileUtils工具类
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
getFileByPath : 根據文件路徑獲取文件
isFileExists : 判斷文件是否存在
isDir : 判斷是否是目錄
isFile : 判斷是否是文件
createOrExistsDir : 判斷目錄是否存在,不存在則判斷是否創建成功
createOrExistsFile : 判斷文件是否存在,不存在則判斷是否創建成功
createFileByDeleteOldFile : 判斷文件是否存在,存在則在創建之前刪除
copyDir : 復制目錄
copyFile : 復制文件
moveDir : 移動目錄
moveFile : 移動文件
deleteDir : 刪除目錄
deleteFile : 刪除文件
listFilesInDir : 獲取目錄下所有文件
listFilesInDir : 獲取目錄下所有文件包括子目錄
listFilesInDirWithFilter : 獲取目錄下所有后綴名為suffix的文件
listFilesInDirWithFilter : 獲取目錄下所有后綴名為suffix的文件包括子目錄
listFilesInDirWithFilter : 獲取目錄下所有符合filter的文件
listFilesInDirWithFilter : 獲取目錄下所有符合filter的文件包括子目錄
searchFileInDir : 獲取目錄下指定文件名的文件包括子目錄
writeFileFromIS : 將輸入流寫入文件
writeFileFromString : 將字符串寫入文件
getFileCharsetSimple : 簡單獲取文件編碼格式
getFileLines : 獲取文件行數
readFile2List : 指定編碼按行讀取文件到List
readFile2SB : 指定編碼按行讀取文件到StringBuilder中
getFileSize : 獲取文件大小
getFileMD5 : 獲取文件的MD5校驗碼
getDirName : 根據全路徑獲取最長目錄
getFileName : 根據全路徑獲取文件名
getFileNameNoExtension : 根據全路徑獲取文件名不帶拓展名
getFileExtension : 根據全路徑獲取文件拓展名
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.Closeable;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;import static com.blankj.utilcode.utils.ConstUtils.*;/*** <pre>* author: Blankj* blog : http://blankj.com* time : 2016/8/11* desc : 文件相關工具類* </pre>*/
public class FileUtils {private FileUtils() {throw new UnsupportedOperationException("u can't instantiate me...");}/*** 根據文件路徑獲取文件** @param filePath 文件路徑* @return 文件*/public static File getFileByPath(String filePath) {return StringUtils.isSpace(filePath) ? null : new File(filePath);}/*** 判斷文件是否存在** @param filePath 文件路徑* @return {@code true}: 存在<br>{@code false}: 不存在*/public static boolean isFileExists(String filePath) {return isFileExists(getFileByPath(filePath));}/*** 判斷文件是否存在** @param file 文件* @return {@code true}: 存在<br>{@code false}: 不存在*/public static boolean isFileExists(File file) {return file != null && file.exists();}/*** 判斷是否是目錄** @param dirPath 目錄路徑* @return {@code true}: 是<br>{@code false}: 否*/public static boolean isDir(String dirPath) {return isDir(getFileByPath(dirPath));}/*** 判斷是否是目錄** @param file 文件* @return {@code true}: 是<br>{@code false}: 否*/public static boolean isDir(File file) {return isFileExists(file) && file.isDirectory();}/*** 判斷是否是文件** @param filePath 文件路徑* @return {@code true}: 是<br>{@code false}: 否*/public static boolean isFile(String filePath) {return isFile(getFileByPath(filePath));}/*** 判斷是否是文件** @param file 文件* @return {@code true}: 是<br>{@code false}: 否*/public static boolean isFile(File file) {return isFileExists(file) && file.isFile();}/*** 判斷目錄是否存在,不存在則判斷是否創建成功** @param dirPath 文件路徑* @return {@code true}: 存在或創建成功<br>{@code false}: 不存在或創建失敗*/public static boolean createOrExistsDir(String dirPath) {return createOrExistsDir(getFileByPath(dirPath));}/*** 判斷目錄是否存在,不存在則判斷是否創建成功** @param file 文件* @return {@code true}: 存在或創建成功<br>{@code false}: 不存在或創建失敗*/public static boolean createOrExistsDir(File file) {// 如果存在,是目錄則返回true,是文件則返回false,不存在則返回是否創建成功return file != null && (file.exists() ? file.isDirectory() : file.mkdirs());}/*** 判斷文件是否存在,不存在則判斷是否創建成功** @param filePath 文件路徑* @return {@code true}: 存在或創建成功<br>{@code false}: 不存在或創建失敗*/public static boolean createOrExistsFile(String filePath) {return createOrExistsFile(getFileByPath(filePath));}/*** 判斷文件是否存在,不存在則判斷是否創建成功** @param file 文件* @return {@code true}: 存在或創建成功<br>{@code false}: 不存在或創建失敗*/public static boolean createOrExistsFile(File file) {if (file == null) return false;// 如果存在,是文件則返回true,是目錄則返回falseif (file.exists()) return file.isFile();if (!createOrExistsDir(file.getParentFile())) return false;try {return file.createNewFile();} catch (IOException e) {e.printStackTrace();return false;}}/*** 判斷文件是否存在,存在則在創建之前刪除** @param filePath 文件路徑* @return {@code true}: 創建成功<br>{@code false}: 創建失敗*/public static boolean createFileByDeleteOldFile(String filePath) {return createFileByDeleteOldFile(getFileByPath(filePath));}/*** 判斷文件是否存在,存在則在創建之前刪除** @param file 文件* @return {@code true}: 創建成功<br>{@code false}: 創建失敗*/public static boolean createFileByDeleteOldFile(File file) {if (file == null) return false;// 文件存在并且刪除失敗返回falseif (file.exists() && file.isFile() && !file.delete()) return false;// 創建目錄失敗返回falseif (!createOrExistsDir(file.getParentFile())) return false;try {return file.createNewFile();} catch (IOException e) {e.printStackTrace();return false;}}/*** 復制或移動目錄** @param srcDirPath 源目錄路徑* @param destDirPath 目標目錄路徑* @param isMove 是否移動* @return {@code true}: 復制或移動成功<br>{@code false}: 復制或移動失敗*/private static boolean copyOrMoveDir(String srcDirPath, String destDirPath, boolean isMove) {return copyOrMoveDir(getFileByPath(srcDirPath), getFileByPath(destDirPath), isMove);}/*** 復制或移動目錄** @param srcDir 源目錄* @param destDir 目標目錄* @param isMove 是否移動* @return {@code true}: 復制或移動成功<br>{@code false}: 復制或移動失敗*/private static boolean copyOrMoveDir(File srcDir, File destDir, boolean isMove) {if (srcDir == null || destDir == null) return false;// 如果目標目錄在源目錄中則返回false,看不懂的話好好想想遞歸怎么結束// srcPath : F:\\MyGithub\\AndroidUtilCode\\utilcode\\src\\test\\res// destPath: F:\\MyGithub\\AndroidUtilCode\\utilcode\\src\\test\\res1// 為防止以上這種情況出現出現誤判,須分別在后面加個路徑分隔符String srcPath = srcDir.getPath() + File.separator;String destPath = destDir.getPath() + File.separator;if (destPath.contains(srcPath)) return false;// 源文件不存在或者不是目錄則返回falseif (!srcDir.exists() || !srcDir.isDirectory()) return false;// 目標目錄不存在返回falseif (!createOrExistsDir(destDir)) return false;File[] files = srcDir.listFiles();for (File file : files) {File oneDestFile = new File(destPath + file.getName());if (file.isFile()) {// 如果操作失敗返回falseif (!copyOrMoveFile(file, oneDestFile, isMove)) return false;} else if (file.isDirectory()) {// 如果操作失敗返回falseif (!copyOrMoveDir(file, oneDestFile, isMove)) return false;}}return !isMove || deleteDir(srcDir);}/*** 復制或移動文件** @param srcFilePath 源文件路徑* @param destFilePath 目標文件路徑* @param isMove 是否移動* @return {@code true}: 復制或移動成功<br>{@code false}: 復制或移動失敗*/private static boolean copyOrMoveFile(String srcFilePath, String destFilePath, boolean isMove) {return copyOrMoveFile(getFileByPath(srcFilePath), getFileByPath(destFilePath), isMove);}/*** 復制或移動文件** @param srcFile 源文件* @param destFile 目標文件* @param isMove 是否移動* @return {@code true}: 復制或移動成功<br>{@code false}: 復制或移動失敗*/private static boolean copyOrMoveFile(File srcFile, File destFile, boolean isMove) {if (srcFile == null || destFile == null) return false;// 源文件不存在或者不是文件則返回falseif (!srcFile.exists() || !srcFile.isFile()) return false;// 目標文件存在且是文件則返回falseif (destFile.exists() && destFile.isFile()) return false;// 目標目錄不存在返回falseif (!createOrExistsDir(destFile.getParentFile())) return false;try {return writeFileFromIS(destFile, new FileInputStream(srcFile), false)&& !(isMove && !deleteFile(srcFile));} catch (FileNotFoundException e) {e.printStackTrace();return false;}}/*** 復制目錄** @param srcDirPath 源目錄路徑* @param destDirPath 目標目錄路徑* @return {@code true}: 復制成功<br>{@code false}: 復制失敗*/public static boolean copyDir(String srcDirPath, String destDirPath) {return copyDir(getFileByPath(srcDirPath), getFileByPath(destDirPath));}/*** 復制目錄** @param srcDir 源目錄* @param destDir 目標目錄* @return {@code true}: 復制成功<br>{@code false}: 復制失敗*/public static boolean copyDir(File srcDir, File destDir) {return copyOrMoveDir(srcDir, destDir, false);}/*** 復制文件** @param srcFilePath 源文件路徑* @param destFilePath 目標文件路徑* @return {@code true}: 復制成功<br>{@code false}: 復制失敗*/public static boolean copyFile(String srcFilePath, String destFilePath) {return copyFile(getFileByPath(srcFilePath), getFileByPath(destFilePath));}/*** 復制文件** @param srcFile 源文件* @param destFile 目標文件* @return {@code true}: 復制成功<br>{@code false}: 復制失敗*/public static boolean copyFile(File srcFile, File destFile) {return copyOrMoveFile(srcFile, destFile, false);}/*** 移動目錄** @param srcDirPath 源目錄路徑* @param destDirPath 目標目錄路徑* @return {@code true}: 移動成功<br>{@code false}: 移動失敗*/public static boolean moveDir(String srcDirPath, String destDirPath) {return moveDir(getFileByPath(srcDirPath), getFileByPath(destDirPath));}/*** 移動目錄** @param srcDir 源目錄* @param destDir 目標目錄* @return {@code true}: 移動成功<br>{@code false}: 移動失敗*/public static boolean moveDir(File srcDir, File destDir) {return copyOrMoveDir(srcDir, destDir, true);}/*** 移動文件** @param srcFilePath 源文件路徑* @param destFilePath 目標文件路徑* @return {@code true}: 移動成功<br>{@code false}: 移動失敗*/public static boolean moveFile(String srcFilePath, String destFilePath) {return moveFile(getFileByPath(srcFilePath), getFileByPath(destFilePath));}/*** 移動文件** @param srcFile 源文件* @param destFile 目標文件* @return {@code true}: 移動成功<br>{@code false}: 移動失敗*/public static boolean moveFile(File srcFile, File destFile) {return copyOrMoveFile(srcFile, destFile, true);}/*** 刪除目錄** @param dirPath 目錄路徑* @return {@code true}: 刪除成功<br>{@code false}: 刪除失敗*/public static boolean deleteDir(String dirPath) {return deleteDir(getFileByPath(dirPath));}/*** 刪除目錄** @param dir 目錄* @return {@code true}: 刪除成功<br>{@code false}: 刪除失敗*/public static boolean deleteDir(File dir) {if (dir == null) return false;// 目錄不存在返回trueif (!dir.exists()) return true;// 不是目錄返回falseif (!dir.isDirectory()) return false;// 現在文件存在且是文件夾File[] files = dir.listFiles();if (files != null && files.length != 0) {for (File file : files) {if (file.isFile()) {if (!deleteFile(file)) return false;} else if (file.isDirectory()) {if (!deleteDir(file)) return false;}}}return dir.delete();}/*** 刪除文件** @param srcFilePath 文件路徑* @return {@code true}: 刪除成功<br>{@code false}: 刪除失敗*/public static boolean deleteFile(String srcFilePath) {return deleteFile(getFileByPath(srcFilePath));}/*** 刪除文件** @param file 文件* @return {@code true}: 刪除成功<br>{@code false}: 刪除失敗*/public static boolean deleteFile(File file) {return file != null && (!file.exists() || file.isFile() && file.delete());}/*** 刪除目錄下的所有文件** @param dirPath 目錄路徑* @return {@code true}: 刪除成功<br>{@code false}: 刪除失敗*/public static boolean deleteFilesInDir(String dirPath) {return deleteFilesInDir(getFileByPath(dirPath));}/*** 刪除目錄下的所有文件** @param dir 目錄* @return {@code true}: 刪除成功<br>{@code false}: 刪除失敗*/public static boolean deleteFilesInDir(File dir) {if (dir == null) return false;// 目錄不存在返回trueif (!dir.exists()) return true;// 不是目錄返回falseif (!dir.isDirectory()) return false;// 現在文件存在且是文件夾File[] files = dir.listFiles();if (files != null && files.length != 0) {for (File file : files) {if (file.isFile()) {if (!deleteFile(file)) return false;} else if (file.isDirectory()) {if (!deleteDir(file)) return false;}}}return true;}/*** 獲取目錄下所有文件** @param dirPath 目錄路徑* @param isRecursive 是否遞歸進子目錄* @return 文件鏈表*/public static List<File> listFilesInDir(String dirPath, boolean isRecursive) {return listFilesInDir(getFileByPath(dirPath), isRecursive);}/*** 獲取目錄下所有文件** @param dir 目錄* @param isRecursive 是否遞歸進子目錄* @return 文件鏈表*/public static List<File> listFilesInDir(File dir, boolean isRecursive) {if (isRecursive) return listFilesInDir(dir);if (dir == null || !isDir(dir)) return null;List<File> list = new ArrayList<>();Collections.addAll(list, dir.listFiles());return list;}/*** 獲取目錄下所有文件包括子目錄** @param dirPath 目錄路徑* @return 文件鏈表*/public static List<File> listFilesInDir(String dirPath) {return listFilesInDir(getFileByPath(dirPath));}/*** 獲取目錄下所有文件包括子目錄** @param dir 目錄* @return 文件鏈表*/public static List<File> listFilesInDir(File dir) {if (dir == null || !isDir(dir)) return null;List<File> list = new ArrayList<>();File[] files = dir.listFiles();if (files != null && files.length != 0) {for (File file : files) {list.add(file);if (file.isDirectory()) {list.addAll(listFilesInDir(file));}}}return list;}/*** 獲取目錄下所有后綴名為suffix的文件* <p>大小寫忽略</p>** @param dirPath 目錄路徑* @param suffix 后綴名* @param isRecursive 是否遞歸進子目錄* @return 文件鏈表*/public static List<File> listFilesInDirWithFilter(String dirPath, String suffix, boolean isRecursive) {return listFilesInDirWithFilter(getFileByPath(dirPath), suffix, isRecursive);}/*** 獲取目錄下所有后綴名為suffix的文件* <p>大小寫忽略</p>** @param dir 目錄* @param suffix 后綴名* @param isRecursive 是否遞歸進子目錄* @return 文件鏈表*/public static List<File> listFilesInDirWithFilter(File dir, String suffix, boolean isRecursive) {if (isRecursive) return listFilesInDirWithFilter(dir, suffix);if (dir == null || !isDir(dir)) return null;List<File> list = new ArrayList<>();File[] files = dir.listFiles();if (files != null && files.length != 0) {for (File file : files) {if (file.getName().toUpperCase().endsWith(suffix.toUpperCase())) {list.add(file);}}}return list;}/*** 獲取目錄下所有后綴名為suffix的文件包括子目錄* <p>大小寫忽略</p>** @param dirPath 目錄路徑* @param suffix 后綴名* @return 文件鏈表*/public static List<File> listFilesInDirWithFilter(String dirPath, String suffix) {return listFilesInDirWithFilter(getFileByPath(dirPath), suffix);}/*** 獲取目錄下所有后綴名為suffix的文件包括子目錄* <p>大小寫忽略</p>** @param dir 目錄* @param suffix 后綴名* @return 文件鏈表*/public static List<File> listFilesInDirWithFilter(File dir, String suffix) {if (dir == null || !isDir(dir)) return null;List<File> list = new ArrayList<>();File[] files = dir.listFiles();if (files != null && files.length != 0) {for (File file : files) {if (file.getName().toUpperCase().endsWith(suffix.toUpperCase())) {list.add(file);}if (file.isDirectory()) {list.addAll(listFilesInDirWithFilter(file, suffix));}}}return list;}/*** 獲取目錄下所有符合filter的文件** @param dirPath 目錄路徑* @param filter 過濾器* @param isRecursive 是否遞歸進子目錄* @return 文件鏈表*/public static List<File> listFilesInDirWithFilter(String dirPath, FilenameFilter filter, boolean isRecursive) {return listFilesInDirWithFilter(getFileByPath(dirPath), filter, isRecursive);}/*** 獲取目錄下所有符合filter的文件** @param dir 目錄* @param filter 過濾器* @param isRecursive 是否遞歸進子目錄* @return 文件鏈表*/public static List<File> listFilesInDirWithFilter(File dir, FilenameFilter filter, boolean isRecursive) {if (isRecursive) return listFilesInDirWithFilter(dir, filter);if (dir == null || !isDir(dir)) return null;List<File> list = new ArrayList<>();File[] files = dir.listFiles();if (files != null && files.length != 0) {for (File file : files) {if (filter.accept(file.getParentFile(), file.getName())) {list.add(file);}}}return list;}/*** 獲取目錄下所有符合filter的文件包括子目錄** @param dirPath 目錄路徑* @param filter 過濾器* @return 文件鏈表*/public static List<File> listFilesInDirWithFilter(String dirPath, FilenameFilter filter) {return listFilesInDirWithFilter(getFileByPath(dirPath), filter);}/*** 獲取目錄下所有符合filter的文件包括子目錄** @param dir 目錄* @param filter 過濾器* @return 文件鏈表*/public static List<File> listFilesInDirWithFilter(File dir, FilenameFilter filter) {if (dir == null || !isDir(dir)) return null;List<File> list = new ArrayList<>();File[] files = dir.listFiles();if (files != null && files.length != 0) {for (File file : files) {if (filter.accept(file.getParentFile(), file.getName())) {list.add(file);}if (file.isDirectory()) {list.addAll(listFilesInDirWithFilter(file, filter));}}}return list;}/*** 獲取目錄下指定文件名的文件包括子目錄* <p>大小寫忽略</p>** @param dirPath 目錄路徑* @param fileName 文件名* @return 文件鏈表*/public static List<File> searchFileInDir(String dirPath, String fileName) {return searchFileInDir(getFileByPath(dirPath), fileName);}/*** 獲取目錄下指定文件名的文件包括子目錄* <p>大小寫忽略</p>** @param dir 目錄* @param fileName 文件名* @return 文件鏈表*/public static List<File> searchFileInDir(File dir, String fileName) {if (dir == null || !isDir(dir)) return null;List<File> list = new ArrayList<>();File[] files = dir.listFiles();if (files != null && files.length != 0) {for (File file : files) {if (file.getName().toUpperCase().equals(fileName.toUpperCase())) {list.add(file);}if (file.isDirectory()) {list.addAll(searchFileInDir(file, fileName));}}}return list;}/*** 將輸入流寫入文件** @param filePath 路徑* @param is 輸入流* @param append 是否追加在文件末* @return {@code true}: 寫入成功<br>{@code false}: 寫入失敗*/public static boolean writeFileFromIS(String filePath, InputStream is, boolean append) {return writeFileFromIS(getFileByPath(filePath), is, append);}/*** 將輸入流寫入文件** @param file 文件* @param is 輸入流* @param append 是否追加在文件末* @return {@code true}: 寫入成功<br>{@code false}: 寫入失敗*/public static boolean writeFileFromIS(File file, InputStream is, boolean append) {if (file == null || is == null) return false;if (!createOrExistsFile(file)) return false;OutputStream os = null;try {os = new BufferedOutputStream(new FileOutputStream(file, append));byte data[] = new byte[KB];int len;while ((len = is.read(data, 0, KB)) != -1) {os.write(data, 0, len);}return true;} catch (IOException e) {e.printStackTrace();return false;} finally {closeIO(is, os);}}/*** 將字符串寫入文件** @param filePath 文件路徑* @param content 寫入內容* @param append 是否追加在文件末* @return {@code true}: 寫入成功<br>{@code false}: 寫入失敗*/public static boolean writeFileFromString(String filePath, String content, boolean append) {return writeFileFromString(getFileByPath(filePath), content, append);}/*** 將字符串寫入文件** @param file 文件* @param content 寫入內容* @param append 是否追加在文件末* @return {@code true}: 寫入成功<br>{@code false}: 寫入失敗*/public static boolean writeFileFromString(File file, String content, boolean append) {if (file == null || content == null) return false;if (!createOrExistsFile(file)) return false;FileWriter fileWriter = null;try {fileWriter = new FileWriter(file, append);fileWriter.write(content);return true;} catch (IOException e) {e.printStackTrace();return false;} finally {closeIO(fileWriter);}}/*** 指定編碼按行讀取文件到List** @param filePath 文件路徑* @param charsetName 編碼格式* @return 文件行鏈表*/public static List<String> readFile2List(String filePath, String charsetName) {return readFile2List(getFileByPath(filePath), charsetName);}/*** 指定編碼按行讀取文件到List** @param file 文件* @param charsetName 編碼格式* @return 文件行鏈表*/public static List<String> readFile2List(File file, String charsetName) {return readFile2List(file, 0, 0x7FFFFFFF, charsetName);}/*** 指定編碼按行讀取文件到List** @param filePath 文件路徑* @param st 需要讀取的開始行數* @param end 需要讀取的結束行數* @param charsetName 編碼格式* @return 包含制定行的list*/public static List<String> readFile2List(String filePath, int st, int end, StringcharsetName) {return readFile2List(getFileByPath(filePath), st, end, charsetName);}/*** 指定編碼按行讀取文件到List** @param file 文件* @param st 需要讀取的開始行數* @param end 需要讀取的結束行數* @param charsetName 編碼格式* @return 包含從start行到end行的list*/public static List<String> readFile2List(File file, int st, int end, String charsetName) {if (file == null) return null;if (st > end) return null;BufferedReader reader = null;try {String line;int curLine = 1;List<String> list = new ArrayList<>();if (StringUtils.isSpace(charsetName)) {reader = new BufferedReader(new FileReader(file));} else {reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), charsetName));}while ((line = reader.readLine()) != null) {if (curLine > end) break;if (st <= curLine && curLine <= end) list.add(line);++curLine;}return list;} catch (IOException e) {e.printStackTrace();return null;} finally {closeIO(reader);}}/*** 指定編碼按行讀取文件到字符串中** @param filePath 文件路徑* @param charsetName 編碼格式* @return 字符串*/public static String readFile2String(String filePath, String charsetName) {return readFile2String(getFileByPath(filePath), charsetName);}/*** 指定編碼按行讀取文件到字符串中** @param file 文件* @param charsetName 編碼格式* @return 字符串*/public static String readFile2String(File file, String charsetName) {if (file == null) return null;BufferedReader reader = null;try {StringBuilder sb = new StringBuilder();if (StringUtils.isSpace(charsetName)) {reader = new BufferedReader(new InputStreamReader(new FileInputStream(file)));} else {reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), charsetName));}String line;while ((line = reader.readLine()) != null) {sb.append(line).append("\r\n");// windows系統換行為\r\n,Linux為\n}// 要去除最后的換行符return sb.delete(sb.length() - 2, sb.length()).toString();} catch (IOException e) {e.printStackTrace();return null;} finally {closeIO(reader);}}/*** 讀取文件到字符數組中** @param filePath 文件路徑* @return 字符數組*/public static byte[] readFile2Bytes(String filePath) {return readFile2Bytes(getFileByPath(filePath));}/*** 讀取文件到字符數組中** @param file 文件* @return 字符數組*/public static byte[] readFile2Bytes(File file) {if (file == null) return null;try {return ConvertUtils.inputStream2Bytes(new FileInputStream(file));} catch (FileNotFoundException e) {e.printStackTrace();return null;}}/*** 簡單獲取文件編碼格式** @param filePath 文件路徑* @return 文件編碼*/public static String getFileCharsetSimple(String filePath) {return getFileCharsetSimple(getFileByPath(filePath));}/*** 簡單獲取文件編碼格式** @param file 文件* @return 文件編碼*/public static String getFileCharsetSimple(File file) {int p = 0;InputStream is = null;try {is = new BufferedInputStream(new FileInputStream(file));p = (is.read() << 8) + is.read();} catch (IOException e) {e.printStackTrace();} finally {closeIO(is);}switch (p) {case 0xefbb:return "UTF-8";case 0xfffe:return "Unicode";case 0xfeff:return "UTF-16BE";default:return "GBK";}}/*** 獲取文件行數** @param filePath 文件路徑* @return 文件行數*/public static int getFileLines(String filePath) {return getFileLines(getFileByPath(filePath));}/*** 獲取文件行數** @param file 文件* @return 文件行數*/public static int getFileLines(File file) {int count = 1;InputStream is = null;try {is = new BufferedInputStream(new FileInputStream(file));byte[] buffer = new byte[KB];int readChars;while ((readChars = is.read(buffer, 0, KB)) != -1) {for (int i = 0; i < readChars; ++i) {if (buffer[i] == '\n') ++count;}}} catch (IOException e) {e.printStackTrace();} finally {closeIO(is);}return count;}/*** 獲取文件大小** @param filePath 文件路徑* @return 文件大小*/public static String getFileSize(String filePath) {return getFileSize(getFileByPath(filePath));}/*** 獲取文件大小* <p>例如:getFileSize(file, ConstUtils.MB); 返回文件大小單位為MB</p>** @param file 文件* @return 文件大小*/public static String getFileSize(File file) {if (!isFileExists(file)) return "";return ConvertUtils.byte2FitSize(file.length());}/*** 獲取文件的MD5校驗碼** @param filePath 文件* @return 文件的MD5校驗碼*/public static String getFileMD5(String filePath) {return getFileMD5(getFileByPath(filePath));}/*** 獲取文件的MD5校驗碼** @param file 文件* @return 文件的MD5校驗碼*/public static String getFileMD5(File file) {return EncryptUtils.encryptMD5File2String(file);}/*** 關閉IO** @param closeables closeable*/public static void closeIO(Closeable... closeables) {if (closeables == null) return;try {for (Closeable closeable : closeables) {if (closeable != null) {closeable.close();}}} catch (IOException e) {e.printStackTrace();}}/*** 獲取全路徑中的最長目錄** @param file 文件* @return filePath最長目錄*/public static String getDirName(File file) {if (file == null) return null;return getDirName(file.getPath());}/*** 獲取全路徑中的最長目錄** @param filePath 文件路徑* @return filePath最長目錄*/public static String getDirName(String filePath) {if (StringUtils.isSpace(filePath)) return filePath;int lastSep = filePath.lastIndexOf(File.separator);return lastSep == -1 ? "" : filePath.substring(0, lastSep + 1);}/*** 獲取全路徑中的文件名** @param file 文件* @return 文件名*/public static String getFileName(File file) {if (file == null) return null;return getFileName(file.getPath());}/*** 獲取全路徑中的文件名** @param filePath 文件路徑* @return 文件名*/public static String getFileName(String filePath) {if (StringUtils.isSpace(filePath)) return filePath;int lastSep = filePath.lastIndexOf(File.separator);return lastSep == -1 ? filePath : filePath.substring(lastSep + 1);}/*** 獲取全路徑中的不帶拓展名的文件名** @param file 文件* @return 不帶拓展名的文件名*/public static String getFileNameNoExtension(File file) {if (file == null) return null;return getFileNameNoExtension(file.getPath());}/*** 獲取全路徑中的不帶拓展名的文件名** @param filePath 文件路徑* @return 不帶拓展名的文件名*/public static String getFileNameNoExtension(String filePath) {if (StringUtils.isSpace(filePath)) return filePath;int lastPoi = filePath.lastIndexOf('.');int lastSep = filePath.lastIndexOf(File.separator);if (lastSep == -1) {return (lastPoi == -1 ? filePath : filePath.substring(0, lastPoi));}if (lastPoi == -1 || lastSep > lastPoi) {return filePath.substring(lastSep + 1);}return filePath.substring(lastSep + 1, lastPoi);}/*** 獲取全路徑中的文件拓展名** @param file 文件* @return 文件拓展名*/public static String getFileExtension(File file) {if (file == null) return null;return getFileExtension(file.getPath());}/*** 獲取全路徑中的文件拓展名** @param filePath 文件路徑* @return 文件拓展名*/public static String getFileExtension(String filePath) {if (StringUtils.isSpace(filePath)) return filePath;int lastPoi = filePath.lastIndexOf('.');int lastSep = filePath.lastIndexOf(File.separator);if (lastPoi == -1 || lastSep >= lastPoi) return "";return filePath.substring(lastPoi + 1);}
}
總結
以上是生活随笔為你收集整理的FileUtils工具类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (原创)RHEL/CentOS 5.x使
- 下一篇: 密码加密和解密