焦点热议:值得分享的超全文件工具类FileUtil

时间:2022-10-05 20:32:04       来源:互联网


(相关资料图)

结合以前的项目开发中遇到的不同的文件操作,在这里基本上提取出了所遇到过的文件操作的工具类。

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" rel="external nofollow" 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()) {    deleteFile(f.getAbsolutePath());   }  }  return file.delete(); } /**  * get file size  * <ul>  * <li>if path is null or empty, return -1</li>  * <li>if path exist and it is a file, return file size, else return -1</li>  * <ul>  *   * @param path  * @return returns the length of this file in bytes. returns -1 if the file does not exist.  */ public static long getFileSize(String path) {  if (StringUtils.isBlank(path)) {   return -1;  }  File file = new File(path);  return (file.exists() && file.isFile() ? file.length() : -1); }}

以上就是本文的全部内容,希望对大家的学习有所帮助,。

关键词: 文件工具类 FileUtil