文件名處理是日常開發高頻需求。本文提供兩個健壯的工具方法:獲取不帶後綴的文件名、獲取文件擴展名,並處理了邊界情況。
/**
* 獲取不帶擴展名的文件名
* @param fileName 完整文件名
* @return 不帶後綴的文件名,若無後綴則返回原名
*/
public static String getFileNameWithoutExtension(String fileName) {
if (fileName == null || fileName.isEmpty()) {
return fileName;
}
int dotIndex = fileName.lastIndexOf('.');
// 檢查:存在點號、不是第一個字符、不是最後一個字符
if (dotIndex > 0 && dotIndex < fileName.length() - 1) {
return fileName.substring(0, dotIndex);
}
return fileName;
}
/**
* 獲取文件擴展名(不含點號)
* @param fileName 完整文件名
* @return 擴展名,若無則返回原文件名
*/
public static String getExtensionName(String fileName) {
if (fileName == null || fileName.isEmpty()) {
return fileName;
}
int dotIndex = fileName.lastIndexOf('.');
// 檢查:存在點號、不是第一個字符、不是最後一個字符
if (dotIndex > 0 && dotIndex < fileName.length() - 1) {
return fileName.substring(dotIndex + 1);
}
return "";
}
| 輸入文件名 | 不帶後綴名稱 | 擴展名 | 說明 |
|---|---|---|---|
document.pdf | document | pdf | 標準情況 |
archive.tar.gz | archive.tar | gz | 多重後綴,取最後一個 |
.gitignore | .gitignore | | 隱藏文件,無主文件名 |
README | README | | 無後綴 |
config. | config. | | 以點結尾,無擴展名 |
null | null | null | 空值保護 |
.tar.gz)dotIndex > 0 排除隱藏文件;dotIndex < length - 1 排除以點結尾的情況
public static String getFileNameWithoutExtensionFromPath(String filePath) {
if (filePath == null || filePath.isEmpty()) {
return filePath;
}
// 先提取文件名(處理路徑分隔符)
String fileName = new File(filePath).getName();
return getFileNameWithoutExtension(fileName);
}
FilenameUtils 或 Guava Files 等成熟庫\\ vs Unix /)這兩個方法簡潔高效,經過邊界測試驗證,可直接集成到項目工具類中使用。