超全的檔案工具類 FileUtil
阿新 • • 發佈:2019-01-07
結合以前的專案開發中遇到的不同的檔案操作,在這裡基本上提取出了所遇到過的檔案操作的工具類。
1 我專案中用到的檔案工具類
1 讀取raw檔案、file檔案,drawable檔案,asset檔案,比如本地的json資料,本地文字等;
如:String result =FileUtil.getString(context,”raw://first.json”)
2 讀取本地的property檔案,並轉化為hashMap型別的資料 (simpleProperty2HashMap);
3 將raw檔案拷貝到指定目錄(copyRawFile);
4 基本檔案讀寫操作(readFile,writeFile);
5 從檔案的完整路徑名(路徑+檔名)中提取 路徑(extractFilePath);
6 從檔案的完整路徑名(路徑+檔名)中提取檔名(包含副檔名)
如:d:\path\file.ext –> file.ext(extractFileName)
7 檢查指定檔案的路徑是否存在(pathExists)
8 檢查制定檔案是否存在(fileExists)
9 建立目錄(makeDir)
10 移除字串中的BOM字首(removeBomHeaderIfExists)
package com.nsu.edu.library.utils;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.text.TextUtils;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Properties;
import java.util.Set;
/**
* Create By Anthony on 2016/1/15
* Class Note:檔案工具類
* 包含內容:
* 1 讀取raw檔案、file檔案,drawable檔案,asset檔案,比如本地的json資料,本地文字等;
* 如:String result =FileUtil.getString(context,"raw://first.json")
* 2 讀取本地的property檔案,並轉化為hashMap型別的資料(simpleProperty2HashMap);
* 3 將raw檔案拷貝到指定目錄(copyRawFile);
* 4 基本檔案讀寫操作(readFile,writeFile);
* 5 從檔案的完整路徑名(路徑+檔名)中提取 路徑(extractFilePath);
* 6 從檔案的完整路徑名(路徑+檔名)中提取檔名(包含副檔名)
如:d:\path\file.ext --> file.ext(extractFileName)
*7 檢查指定檔案的路徑是否存在(pathExists)
*8 檢查制定檔案是否存在(fileExists)
*9 建立目錄(makeDir)
*10 移除字串中的BOM字首(removeBomHeaderIfExists)
*/
public class FileUtil {
public static final String ASSETS_PREFIX = "file://android_assets/";
public static final String ASSETS_PREFIX2 = "file://android_asset/";
public static final String ASSETS_PREFIX3 = "assets://";
public static final String ASSETS_PREFIX4 = "asset://";
public static final String RAW_PREFIX = "file://android_raw/";
public static final String RAW_PREFIX2 = "raw://";
public static final String FILE_PREFIX = "file://";
public static final String DRAWABLE_PREFIX = "drawable://";
public static InputStream getStream(Context context, String url) throws IOException {
String lowerUrl = url.toLowerCase();
InputStream is;
if (lowerUrl.startsWith(ASSETS_PREFIX)) {
String assetPath = url.substring(ASSETS_PREFIX.length());
is = getAssetsStream(context, assetPath);
} else if (lowerUrl.startsWith(ASSETS_PREFIX2)) {
String assetPath = url.substring(ASSETS_PREFIX2.length());
is = getAssetsStream(context, assetPath);
} else if (lowerUrl.startsWith(ASSETS_PREFIX3)) {
String assetPath = url.substring(ASSETS_PREFIX3.length());
is = getAssetsStream(context, assetPath);
} else if (lowerUrl.startsWith(ASSETS_PREFIX4)) {
String assetPath = url.substring(ASSETS_PREFIX4.length());
is = getAssetsStream(context, assetPath);
} else if (lowerUrl.startsWith(RAW_PREFIX)) {
String rawName = url.substring(RAW_PREFIX.length());
is = getRawStream(context, rawName);
} else if (lowerUrl.startsWith(RAW_PREFIX2)) {
String rawName = url.substring(RAW_PREFIX2.length());
is = getRawStream(context, rawName);
} else if (lowerUrl.startsWith(FILE_PREFIX)) {
String filePath = url.substring(FILE_PREFIX.length());
is = getFileStream(filePath);
} else if (lowerUrl.startsWith(DRAWABLE_PREFIX)) {
String drawableName = url.substring(DRAWABLE_PREFIX.length());
is = getDrawableStream(context, drawableName);
} else {
throw new IllegalArgumentException(String.format("Unsupported url: %s \n" +
"Supported: \n%sxxx\n%sxxx\n%sxxx", url, ASSETS_PREFIX, RAW_PREFIX, FILE_PREFIX));
}
return is;
}
private static InputStream getAssetsStream(Context context, String path) throws IOException {
return context.getAssets().open(path);
}
private static InputStream getFileStream(String path) throws IOException {
return new FileInputStream(path);
}
private static InputStream getRawStream(Context context, String rawName) throws IOException {
int id = context.getResources().getIdentifier(rawName, "raw", context.getPackageName());
if (id != 0) {
try {
return context.getResources().openRawResource(id);
} catch (Exception e) {
e.printStackTrace();
}
}
throw new IOException(String.format("raw of id: %s from %s not found", id, rawName));
}
private static InputStream getDrawableStream(Context context, String rawName) throws IOException {
int id = context.getResources().getIdentifier(rawName, "drawable", context.getPackageName());
if (id != 0) {
BitmapDrawable drawable = (BitmapDrawable) context.getResources().getDrawable(id);
Bitmap bitmap = drawable.getBitmap();
ByteArrayOutputStream os = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 0, os);
return new ByteArrayInputStream(os.toByteArray());
}
throw new IOException(String.format("bitmap of id: %s from %s not found", id, rawName));
}
public static String getString(Context context, String url) throws IOException {
return getString(context, url, "UTF-8");
}
public static String getString(Context context, String url, String encoding) throws IOException {
String result = readStreamString(getStream(context, url), encoding);
if (result.startsWith("\ufeff")) {
result = result.substring(1);
}
return result;
}
public static String readStreamString(InputStream is, String encoding) throws IOException {
return new String(readStream(is), encoding);
}
public static byte[] readStream(InputStream is) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buf = new byte[1024 * 10];
int readlen;
while ((readlen = is.read(buf)) >= 0) {
baos.write(buf, 0, readlen);
}
baos.close();
return baos.toByteArray();
}
public static Bitmap getDrawableBitmap(Context context, String rawName) {
int id = context.getResources().getIdentifier(rawName, "drawable", context.getPackageName());
if (id != 0) {
BitmapDrawable drawable = (BitmapDrawable) context.getResources().getDrawable(id);
if (drawable != null) {
return drawable.getBitmap();
}
}
return null;
}
/**
* 讀取Property檔案
*/
public static HashMap<String, String> simpleProperty2HashMap(Context context, String path) {
try {
InputStream is = getStream(context, path);
return simpleProperty2HashMap(is);
} catch (IOException e) {
e.printStackTrace();
}
return new HashMap<String, String>();
}
private static HashMap<String, String> simpleProperty2HashMap(InputStream in) throws IOException {
HashMap<String, String> hashMap = new HashMap<String, String>();
Properties properties = new Properties();
properties.load(in);
in.close();
Set keyValue = properties.keySet();
for (Iterator it = keyValue.iterator(); it.hasNext(); ) {
String key = (String) it.next();
hashMap.put(key, (String) properties.get(key));
}
return hashMap;
}
/**
* 將raw檔案拷貝到指定目錄
*/
public static void copyRawFile(Context ctx, String rawFileName, String to) {
String[] names = rawFileName.split("\\.");
String toFile = to + "/" + names[0] + "." + names[1];
File file = new File(toFile);
if (file.exists()) {
return;
}
try {
InputStream is = getStream(ctx, "raw://" + names[0]);
OutputStream os = new FileOutputStream(toFile);
int byteCount = 0;
byte[] bytes = new byte[1024];
while ((byteCount = is.read(bytes)) != -1) {
os.write(bytes, 0, byteCount);
}
os.close();
is.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 基本檔案操作
*/
public static String FILE_READING_ENCODING = "UTF-8";
public static String FILE_WRITING_ENCODING = "UTF-8";
public static String readFile(String _sFileName, String _sEncoding) throws Exception {
StringBuffer buffContent = null;
String sLine;
FileInputStream fis = null;
BufferedReader buffReader = null;
if (_sEncoding == null || "".equals(_sEncoding)) {
_sEncoding = FILE_READING_ENCODING;
}
try {
fis = new FileInputStream(_sFileName);
buffReader = new BufferedReader(new InputStreamReader(fis,
_sEncoding));
boolean zFirstLine = "UTF-8".equalsIgnoreCase(_sEncoding);
while ((sLine = buffReader.readLine()) != null) {
if (buffContent == null) {
buffContent = new StringBuffer();
} else {
buffContent.append("\n");
}
if (zFirstLine) {
sLine = removeBomHeaderIfExists(sLine);
zFirstLine = false;
}
buffContent.append(sLine);
}// end while
return (buffContent == null ? "" : buffContent.toString());
} catch (FileNotFoundException ex) {
throw new Exception("要讀取的檔案沒有找到!", ex);
} catch (IOException ex) {
throw new Exception("讀取檔案時錯誤!", ex);
} finally {
// 增加異常時資源的釋放
try {
if (buffReader != null)
buffReader.close();
if (fis != null)
fis.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
public static File writeFile(InputStream is, String path, boolean isOverride) throws Exception {
String sPath = extractFilePath(path);
if (!pathExists(sPath)) {
makeDir(sPath, true);
}
if (!isOverride && fileExists(path)) {
if(path.contains(".")) {
String suffix = path.substring(path.lastIndexOf("."));
String pre = path.substring(0, path.lastIndexOf("."));
path = pre + "_" + TimeUtils.getNowTime() + suffix;
} else {
path = path + "_" + TimeUtils.getNowTime();
}
}
FileOutputStream os = null;
File file = null;
try {
file = new File(path);
os = new FileOutputStream(file);
int byteCount = 0;
byte[] bytes = new byte[1024];
while ((byteCount = is.read(bytes)) != -1) {
os.write(bytes, 0, byteCount);
}
os.flush();
return file;
} catch (Exception e) {
e.printStackTrace();
throw new Exception("寫檔案錯誤", e);
} finally {
try {
if (os != null)
os.close();
if (is != null)
is.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
public static File writeFile(String path, String content, String encoding, boolean isOverride) throws Exception {
if (TextUtils.isEmpty(encoding)) {
encoding = FILE_WRITING_ENCODING;
}
InputStream is = new ByteArrayInputStream(content.getBytes(encoding));
return writeFile(is, path, isOverride);
}
/**
* 從檔案的完整路徑名(路徑+檔名)中提取 路徑(包括:Drive+Directroy )
*
* @param _sFilePathName
* @return
*/
public static String extractFilePath(String _sFilePathName) {
int nPos = _sFilePathName.lastIndexOf('/');
if (nPos < 0) {
nPos = _sFilePathName.lastIndexOf('\\');
}
return (nPos >= 0 ? _sFilePathName.substring(0, nPos + 1) : "");
}
/**
* 從檔案的完整路徑名(路徑+檔名)中提取檔名(包含副檔名) <br>
* 如:d:\path\file.ext --> file.ext
*
* @param _sFilePathName
* @return
*/
public static String extractFileName(String _sFilePathName) {
return extractFileName(_sFilePathName, File.separator);
}
/**
* 從檔案的完整路徑名(路徑+檔名)中提取檔名(包含副檔名) <br>
* 如:d:\path\file.ext --> file.ext
*
* @param _sFilePathName 全檔案路徑名
* @param _sFileSeparator 檔案分隔符
* @return
*/
public static String extractFileName(String _sFilePathName,
String _sFileSeparator) {
int nPos = -1;
if (_sFileSeparator == null) {
nPos = _sFilePathName.lastIndexOf(File.separatorChar);
if (nPos < 0) {
nPos = _sFilePathName
.lastIndexOf(File.separatorChar == '/' ? '\\' : '/');
}
} else {
nPos = _sFilePathName.lastIndexOf(_sFileSeparator);
}
if (nPos < 0) {
return _sFilePathName;
}
return _sFilePathName.substring(nPos + 1);
}
/**
* 檢查指定檔案的路徑是否存在
*
* @param _sPathFileName 檔名稱(含路徑)
* @return 若存在,則返回true;否則,返回false
*/
public static boolean pathExists(String _sPathFileName) {
String sPath = extractFilePath(_sPathFileName);
return fileExists(sPath);
}
public static boolean fileExists(String _sPathFileName) {
File file = new File(_sPathFileName);
return file.exists();
}
/**
* 建立目錄
*
* @param _sDir 目錄名稱
* @param _bCreateParentDir 如果父目錄不存在,是否建立父目錄
* @return
*/
public static boolean makeDir(String _sDir, boolean _bCreateParentDir) {
boolean zResult = false;
File file = new File(_sDir);
if (_bCreateParentDir)
zResult = file.mkdirs(); // 如果父目錄不存在,則建立所有必需的父目錄
else
zResult = file.mkdir(); // 如果父目錄不存在,不做處理
if (!zResult)
zResult = file.exists();
return zResult;
}
/**
* 移除字串中的BOM字首
*
* @param _sLine 需要處理的字串
* @return 移除BOM後的字串.
*/
private static String removeBomHeaderIfExists(String _sLine) {
if (_sLine == null) {
return null;
}
String line = _sLine;
if (line.length() > 0) {
char ch = line.charAt(0);
// 使用while是因為用一些工具看到過某些檔案前幾個位元組都是0xfffe.
// 0xfeff,0xfffe是位元組序的不同處理.JVM中,一般是0xfeff
while ((ch == 0xfeff || ch == 0xfffe)) {
line = line.substring(1);
if (line.length() == 0) {
break;
}
ch = line.charAt(0);
}
}
return line;
}
}
2 網上的工具類
這個工具類也大同小異。其中也有很多和我上面重複的一些方法,也有上面沒有的方法。轉自Trinea的android-common專案。這裡直接貼出來,不做任何更改。希望能對看到的人有幫助。也做一個筆記。
package com.nsu.edu.library.utils;
import android.text.TextUtils;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
/**
* File Utils
* <ul>
* Read or write file
* <li>{@link #readFile(String, String)} read file</li>
* <li>{@link #readFileToList(String, String)} read file to string list</li>
* <li>{@link #writeFile(String, String, boolean)} write file from String</li>
* <li>{@link #writeFile(String, String)} write file from String</li>
* <li>{@link #writeFile(String, List, boolean)} write file from String List</li>
* <li>{@link #writeFile(String, List)} write file from String List</li>
* <li>{@link #writeFile(String, InputStream)} write file</li>
* <li>{@link #writeFile(String, InputStream, boolean)} write file</li>
* <li>{@link #writeFile(File, InputStream)} write file</li>
* <li>{@link #writeFile(File, InputStream, boolean)} write file</li>
* </ul>
* <ul>
* Operate file
* <li>{@link #moveFile(File, File)} or {@link #moveFile(String, String)}</li>
* <li>{@link #copyFile(String, String)}</li>
* <li>{@link #getFileExtension(String)}</li>
* <li>{@link #getFileName(String)}</li>
* <li>{@link #getFileNameWithoutExtension(String)}</li>
* <li>{@link #getFileSize(String)}</li>
* <li>{@link #deleteFile(String)}</li>
* <li>{@link #isFileExist(String)}</li>
* <li>{@link #isFolderExist(String)}</li>
* <li>{@link #makeFolders(String)}</li>
* <li>{@link #makeDirs(String)}</li>
* </ul>
*
* @author <a href="http://www.trinea.cn" target="_blank">Trinea</a> 2012-5-12
*/
public class FileUtils {
public final static String FILE_EXTENSION_SEPARATOR = ".";
private FileUtils() {
throw new AssertionError();
}
/**
* read file
*
* @param filePath
* @param charsetName The name of a supported {@link java.nio.charset.Charset </code>charset<code>}
* @return if file not exist, return null, else return content of file
* @throws RuntimeException if an error occurs while operator BufferedReader
*/
public static StringBuilder readFile(String filePath, String charsetName) {
File file = new File(filePath);
StringBuilder fileContent = new StringBuilder("");
if (file == null || !file.isFile()) {
return null;
}
BufferedReader reader = null;
try {
InputStreamReader is = new InputStreamReader(new FileInputStream(file), charsetName);
reader = new BufferedReader(is);
String line = null;
while ((line = reader.readLine()) != null) {
if (!fileContent.toString().equals("")) {
fileContent.append("\r\n");
}
fileContent.append(line);
}
return fileContent;
} catch (IOException e) {
throw new RuntimeException("IOException occurred. ", e);
} finally {
IOUtils.close(reader);
}
}
/**
* write file
*
* @param filePath
* @param content
* @param append is append, if true, write to the end of file, else clear content of file and write into it
* @return return false if content is empty, true otherwise
* @throws RuntimeException if an error occurs while operator FileWriter
*/
public static boolean writeFile(String filePath, String content, boolean append) {
if (StringUtils.isEmpty(content)) {
return false;
}
FileWriter fileWriter = null;
try {
makeDirs(filePath);
fileWriter = new FileWriter(filePath, append);
fileWriter.write(content);
return true;
} catch (IOException e) {
throw new RuntimeException("IOException occurred. ", e);
} finally {
IOUtils.close(fileWriter);
}
}
/**
* write file
*
* @param filePath
* @param contentList
* @param append is append, if true, write to the end of file, else clear content of file and write into it
* @return return false if contentList is empty, true otherwise
* @throws RuntimeException if an error occurs while operator FileWriter
*/
public static boolean writeFile(String filePath, List<String> contentList, boolean append) {
if (ListUtils.isEmpty(contentList)) {
return false;
}
FileWriter fileWriter = null;
try {
makeDirs(filePath);
fileWriter = new FileWriter(filePath, append);
int i = 0;
for (String line : contentList) {
if (i++ > 0) {
fileWriter.write("\r\n");
}
fileWriter.write(line);
}
return true;
} catch (IOException e) {
throw new RuntimeException("IOException occurred. ", e);
} finally {
IOUtils.close(fileWriter);
}
}
/**
* write file, the string will be written to the begin of the file
*
* @param filePath
* @param content
* @return
*/
public static boolean writeFile(String filePath, String content) {
return writeFile(filePath, content, false);
}
/**
* write file, the string list will be written to the begin of the file
*
* @param filePath
* @param contentList
* @return
*/
public static boolean writeFile(String filePath, List<String> contentList) {
return writeFile(filePath, contentList, false);
}
/**
* write file, the bytes will be written to the begin of the file
*
* @param filePath
* @param stream
* @return
* @see {@link #writeFile(String, InputStream, boolean)}
*/
public static boolean writeFile(String filePath, InputStream stream) {
return writeFile(filePath, stream, false);
}
/**
* write file
*
* @param file the file to be opened for writing.
* @param stream the input stream
* @param append if <code>true</code>, then bytes will be written to the end of the file rather than the beginning
* @return return true
* @throws RuntimeException if an error occurs while operator FileOutputStream
*/
public static boolean writeFile(String filePath, InputStream stream, boolean append) {
return writeFile(filePath != null ? new File(filePath) : null, stream, append);
}
/**
* write file, the bytes will be written to the begin of the file
*
* @param file
* @param stream
* @return
* @see {@link #writeFile(File, InputStream, boolean)}
*/
public static boolean writeFile(File file, InputStream stream) {
return writeFile(file, stream, false);
}
/**
* write file
*
* @param file the file to be opened for writing.
* @param stream the input stream
* @param append if <code>true</code>, then bytes will be written to the end of the file rather than the beginning
* @return return true
* @throws RuntimeException if an error occurs while operator FileOutputStream
*/
public static boolean writeFile(File file, InputStream stream, boolean append) {
OutputStream o = null;
try {
makeDirs(file.getAbsolutePath());
o = new FileOutputStream(file, append);
byte data[] = new byte[1024];
int length = -1;
while ((length = stream.read(data)) != -1) {
o.write(data, 0, length);
}
o.flush();
return true;
} catch (FileNotFoundException e) {
throw new RuntimeException("FileNotFoundException occurred. ", e);
} catch (IOException e) {
throw new RuntimeException("IOException occurred. ", e);
} finally {
IOUtils.close(o);
IOUtils.close(stream);
}
}
/**
* move file
*
* @param sourceFilePath
* @param destFilePath
*/
public static void moveFile(String sourceFilePath, String destFilePath) {
if (TextUtils.isEmpty(sourceFilePath) || TextUtils.isEmpty(destFilePath)) {
throw new RuntimeException("Both sourceFilePath and destFilePath cannot be null.");
}
moveFile(new File(sourceFilePath), new File(destFilePath));
}
/**
* move file
*
* @param srcFile
* @param destFile
*/
public static void moveFile(File srcFile, File destFile) {
boolean rename = srcFile.renameTo(destFile);
if (!rename) {
copyFile(srcFile.getAbsolutePath(), destFile.getAbsolutePath());
deleteFile(srcFile.getAbsolutePath());
}
}
/**
* copy file
*
* @param sourceFilePath
* @param destFilePath
* @return
* @throws RuntimeException if an error occurs while operator FileOutputStream
*/
public static boolean copyFile(String sourceFilePath, String destFilePath) {
InputStream inputStream = null;
try {
inputStream = new FileInputStream(sourceFilePath);
} catch (FileNotFoundException e) {
throw new RuntimeException("FileNotFoundException occurred. ", e);
}
return writeFile(destFilePath, inputStream);
}
/**
* read file to string list, a element of list is a line
*
* @param filePath
* @param charsetName The name of a supported {@link java.nio.charset.Charset </code>charset<code>}
* @return if file not exist, return null, else return content of file
* @throws RuntimeException if an error occurs while operator BufferedReader
*/
public static List<String> readFileToList(String filePath, String charsetName) {
File file = new File(filePath);
List<String> fileContent = new ArrayList<String>();
if (file == null || !file.isFile()) {
return null;
}
BufferedReader reader = null;
try {
InputStreamReader is = new InputStreamReader(new FileInputStream(file), charsetName);
reader = new BufferedReader(is);
String line = null;
while ((line = reader.readLine()) != null) {
fileContent.add(line);
}
return fileContent;
} catch (IOException e) {
throw new RuntimeException("IOException occurred. ", e);
} finally {
IOUtils.close(reader);
}
}
/**
* get file name from path, not include suffix
*
* <pre>
* getFileNameWithoutExtension(null) = null
* getFileNameWithoutExtension("") = ""
* getFileNameWithoutExtension(" ") = " "
* getFileNameWithoutExtension("abc") = "abc"
* getFileNameWithoutExtension("a.mp3") = "a"
* getFileNameWithoutExtension("a.b.rmvb") = "a.b"
* getFileNameWithoutExtension("c:\\") = ""
* getFileNameWithoutExtension("c:\\a") = "a"
* getFileNameWithoutExtension("c:\\a.b") = "a"
* getFileNameWithoutExtension("c:a.txt\\a") = "a"
* getFileNameWithoutExtension("/home/admin") = "admin"
* getFileNameWithoutExtension("/home/admin/a.txt/b.mp3") = "b"
* </pre>
*
* @param filePath
* @return file name from path, not include suffix
* @see
*/
public static String getFileNameWithoutExtension(String filePath) {
if (StringUtils.isEmpty(filePath)) {
return filePath;
}
int extenPosi = filePath.lastIndexOf(FILE_EXTENSION_SEPARATOR);
int filePosi = filePath.lastIndexOf(File.separator);
if (filePosi == -1) {
return (extenPosi == -1 ? filePath : filePath.substring(0, extenPosi));
}
if (extenPosi == -1) {
return filePath.substring(filePosi + 1);
}
return (filePosi < extenPosi ? filePath.substring(filePosi + 1, extenPosi) : filePath.substring(filePosi + 1));
}
/**
* get file name from path, include suffix
*
* <pre>
* getFileName(null) = null
* getFileName("") = ""
* getFileName(" ") = " "
* getFileName("a.mp3") = "a.mp3"
* getFileName("a.b.rmvb") = "a.b.rmvb"
* getFileName("abc") = "abc"
* getFileName("c:\\") = ""
* getFileName("c:\\a") = "a"
* getFileName("c:\\a.b") = "a.b"
* getFileName("c:a.txt\\a") = "a"
* getFileName("/home/admin") = "admin"
* getFileName("/home/admin/a.txt/b.mp3") = "b.mp3"
* </pre>
*
* @param filePath
* @return file name from path, include suffix
*/
public static String getFileName(String filePath) {
if (StringUtils.isEmpty(filePath)) {
return filePath;
}
int filePosi = filePath.lastIndexOf(File.separator);
return (filePosi == -1) ? filePath : filePath.substring(filePosi + 1);
}
/**
* get folder name from path
*
* <pre>
* getFolderName(null) = null
* getFolderName("") = ""
* getFolderName(" ") = ""
* getFolderName("a.mp3") = ""
* getFolderName("a.b.rmvb") = ""
* getFolderName("abc") = ""
* getFolderName("c:\\") = "c:"
* getFolderName("c:\\a") = "c:"
* getFolderName("c:\\a.b") = "c:"
* getFolderName("c:a.txt\\a") = "c:a.txt"
* getFolderName("c:a\\b\\c\\d.txt") = "c:a\\b\\c"
* getFolderName("/home/admin") = "/home"
* getFolderName("/home/admin/a.txt/b.mp3") = "/home/admin/a.txt"
* </pre>
*
* @param filePath
* @return
*/
public static String getFolderName(String filePath) {
if (StringUtils.isEmpty(filePath)) {
return filePath;
}
int filePosi = filePath.lastIndexOf(File.separator);
return (filePosi == -1) ? "" : filePath.substring(0, filePosi);
}
/**
* get suffix of file from path
*
* <pre>
* getFileExtension(null) = ""
* getFileExtension("") = ""
* getFileExtension(" ") = " "
* getFileExtension("a.mp3") = "mp3"
* getFileExtension("a.b.rmvb") = "rmvb"
* getFileExtension("abc") = ""
* getFileExtension("c:\\") = ""
* getFileExtension("c:\\a") = ""
* getFileExtension("c:\\a.b") = "b"
* getFileExtension("c:a.txt\\a") = ""
* getFileExtension("/home/admin") = ""
* getFileExtension("/home/admin/a.txt/b") = ""
* getFileExtension("/home/admin/a.txt/b.mp3") = "mp3"
* </pre>
*
* @param filePath
* @return
*/
public static String getFileExtension(String filePath) {
if (StringUtils.isBlank(filePath)) {
return filePath;
}
int extenPosi = filePath.lastIndexOf(FILE_EXTENSION_SEPARATOR);
int filePosi = filePath.lastIndexOf(File.separator);
if (extenPosi == -1) {
return "";
}
return (filePosi >= extenPosi) ? "" : filePath.substring(extenPosi + 1);
}
/**
* Creates the directory named by the trailing filename of this file, including the complete directory path required
* to create this directory. <br/>
* <br/>
* <ul>
* <strong>Attentions:</strong>
* <li>makeDirs("C:\\Users\\Trinea") can only create users folder</li>
* <li>makeFolder("C:\\Users\\Trinea\\") can create Trinea folder</li>
* </ul>
*
* @param filePath
* @return true if the necessary directories have been created or the target directory already exists, false one of
* the directories can not be created.
* <ul>
* <li>if {@link FileUtils#getFolderName(String)} return null, return false</li>
* <li>if target directory already exists, return true</li>
* <li>return {@link File#makeFolder}</li>
* </ul>
*/
public static boolean makeDirs(String filePath) {
String folderName = getFolderName(filePath);
if (StringUtils.isEmpty(folderName)) {
return false;
}
File folder = new File(folderName);
return (folder.exists() && folder.isDirectory()) ? true : folder.mkdirs();
}
/**
* @param filePath
* @return
* @see #makeDirs(String)
*/
public static boolean makeFolders(String filePath) {
return makeDirs(filePath);
}
/**
* Indicates if this file represents a file on the underlying file system.
*
* @param filePath
* @return
*/
public static boolean isFileExist(String filePath) {
if (StringUtils.isBlank(filePath)) {
return false;
}
File file = new File(filePath);
return (file.exists() && file.isFile());
}
/**
* Indicates if this file represents a directory on the underlying file system.
*
* @param directoryPath
* @return
*/
public static boolean isFolderExist(String directoryPath) {
if (StringUtils.isBlank(directoryPath)) {
return false;
}
File dire = new File(directoryPath);
return (dire.exists() && dire.isDirectory());
}
/**
* delete file or directory
* <ul>
* <li>if path is null or empty, return true</li>
* <li>if path not exist, return true</li>
* <li>if path exist, delete recursion. return true</li>
* <ul>
*
* @param path
* @return
*/
public static boolean deleteFile(String path) {
if (StringUtils.isBlank(path)) {
return true;
}
File file = new File(path);
if (!file.exists()) {
return true;
}
if (file.isFile()) {
return file.delete();
}
if (!file.isDirectory()) {
return false;
}
for (File f : file.listFiles()) {
if (f.isFile()) {
f.delete();
} else if (f.isDirectory())