你想要的这都有-Android文件工具类FileUtils

2024-06-01 08:08

本文主要是介绍你想要的这都有-Android文件工具类FileUtils,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

包含所有关于文件处理的工具类

/**
* 对文件处理的工具类
*/
public class FileUtils {
/**
* 获取可以使用的缓存目录(默认目录名/itlanbaoApp/)
* @param context
* @return
*/
public static File getDiskCacheDir(Context context) {
return getDiskCacheDir(context, FileConstants.RESOURCE_DIRECTORY);
}

/*** 获取可以使用的缓存目录* @param context* @param uniqueName 目录名称* @return*/
public static File getDiskCacheDir(Context context, String uniqueName) {final String cachePath = checkSDCard() ? getExternalCacheDir(context).getPath() : getAppCacheDir(context);File cacheDirFile = new File(cachePath);if (!cacheDirFile.exists()) {cacheDirFile.mkdirs();}return cacheDirFile;
}/*** 获取程序外部的缓存目录* @param context* @return*/public static File getExternalCacheDir(Context context) {// 这个sd卡中文件路径下的内容会随着,程序卸载或者设置中清除缓存后一起清空final String cacheDir = "/Android/data/" + context.getPackageName() + "/cache/";return new File(Environment.getExternalStorageDirectory().getPath() + cacheDir);}/*** 获取文件路径空间大小* @param path* @return*/public static long getUsableSpace(File path) {try{final StatFs stats = new StatFs(path.getPath());return (long) stats.getBlockSize() * (long) stats.getAvailableBlocks();}catch (Exception e) {e.printStackTrace();return -1;}}/*** 空间大小单位格式化* @param size* @return*/public static String formatSize(long size) {

// Formatter.formatFileSize()
String suffix = null;
float fSize=0;

     if (size >= 1024) {suffix = "KB";fSize=size / 1024;if (fSize >= 1024) {suffix = "MB";fSize /= 1024;}if (fSize >= 1024) {suffix = "GB";fSize /= 1024;}} else {fSize = size;}java.text.DecimalFormat df = new java.text.DecimalFormat("#0.00");StringBuilder resultBuffer = new StringBuilder(df.format(fSize));if (suffix != null)resultBuffer.append(suffix);return resultBuffer.toString();}/*** 检查SD卡是否存在** @return*/
public static boolean checkSDCard() {final String status = Environment.getExternalStorageState();if (Environment.MEDIA_MOUNTED.equals(status)) {return true;}return false;
}/*** 获取安装在用户手机上的com.itlanbao.app下的files目录** @return files path*/
public static String getAppFilesDir(Context context) {return context.getFilesDir().getAbsolutePath();
}/*** 获取安装在用户手机上的com.itlanbao.yyapp下的cache目录** @return cache path*/
public static String getAppCacheDir(Context context) {return context.getCacheDir().getPath();
}/*** 创建app主目录** @return boolean*/
public static boolean checkFileDirectory(Context context) {final File resDir = FileUtils.getDiskCacheDir(context);if (!resDir.exists()) {return resDir.mkdirs();}return true;
}/*** 创建缓存文件夹*/
public static void initCacheFile(Context context) {if (LogUtils.DEBUG) {LogUtils.v("initCacheFile");}final String cacheDir = FileUtils.getDiskCacheDir(context).getAbsolutePath();final String imageDirPath = cacheDir + FileConstants.CACHE_IMAGE_DIR;final File imageFileDir = new File(imageDirPath);if (!imageFileDir.exists()) {boolean isOk = imageFileDir.mkdirs();if (LogUtils.DEBUG) {LogUtils.v(imageDirPath + " 文件夹创建isOk" + isOk);}}final String audioDirPath = cacheDir + FileConstants.CACHE_AUDIO_DIR;final File audioFileDir = new File(audioDirPath);if (!audioFileDir.exists()) {boolean isOk = audioFileDir.mkdirs();if (LogUtils.DEBUG) {LogUtils.v(audioDirPath + " 文件夹创建isOk" + isOk);}}final String messageDirPath = cacheDir + FileConstants.CACHE_MESSAGE_DIR;final File messageFileDir = new File(messageDirPath);if (!messageFileDir.exists()) {boolean isOk = messageFileDir.mkdirs();if (LogUtils.DEBUG) {LogUtils.v(imageDirPath + " 文件夹创建isOk" + isOk);}}
}/*** 读取文件** @param sFileName* @return*/
public static String readFile(String sFileName) {if (TextUtils.isEmpty(sFileName)) {return null;}final StringBuffer sDest = new StringBuffer();final File f = new File(sFileName);if (!f.exists()) {return null;}try {FileInputStream is = new FileInputStream(f);BufferedReader br = new BufferedReader(new InputStreamReader(is));try {String data = null;while ((data = br.readLine()) != null) {sDest.append(data);}} catch (IOException ioex) {if (LogUtils.DEBUG) {LogUtils.e(ioex);}} finally {is.close();is = null;br.close();br = null;}} catch (Exception ex) {if (LogUtils.DEBUG) {LogUtils.e(ex);}} catch (OutOfMemoryError ex) {if (LogUtils.DEBUG) {ex.printStackTrace();}}return sDest.toString().trim();
}/*** 从assets 文件夹中获取文件并读取数据** @param context* @param fileName* @param isEncoding* @return*/
public static String getFromAssets(Context context, String fileName ) {String result = "";try {final InputStream in = context.getResources().getAssets().open(fileName);// 获取文件的字节数final int lenght = in.available();// 创建byte数组byte[] buffer = new byte[lenght];// 将文件中的数据读到byte数组中in.read(buffer);result = EncodingUtils.getString(buffer, "UTF-8");in.close();buffer = null;} catch(FileNotFoundException e) {e.printStackTrace();} catch (Exception e) {if (LogUtils.DEBUG) {LogUtils.e(e);}}return result;
}/*** 保存文件** @param sToSave* @param sFileName* @param isAppend* @return*/
public static boolean writeStringToFile(String content, String fileName, boolean isAppend) {return writeStringToFile(content, "", fileName, isAppend);
}public static boolean writeStringToFile(String content,String directoryPath, String fileName, boolean isAppend) {if (!TextUtils.isEmpty(content)) {if (!TextUtils.isEmpty(directoryPath)) {// 是否需要创建新的目录final File threadListFile = new File(directoryPath);if (!threadListFile.exists()) {threadListFile.mkdirs();}}boolean bFlag = false;final int iLen = content.length();final File file = new File(fileName);try {if (!file.exists()) {file.createNewFile();}final FileOutputStream fos = new FileOutputStream(file,isAppend);byte[] buffer = new byte[iLen];try {buffer = content.getBytes();fos.write(buffer);if (isAppend) {fos.write("||".getBytes());}fos.flush();bFlag = true;} catch (IOException ioex) {if (LogUtils.DEBUG) {LogUtils.e(ioex);}} finally {fos.close();buffer = null;}} catch (Exception ex) {if (LogUtils.DEBUG) {LogUtils.e(ex);}} catch (OutOfMemoryError o) {if (LogUtils.DEBUG) {o.printStackTrace();}}return bFlag;}return false;
}/*** 重命名** @param filePath* @return*/
public static boolean rename(String filePath, String newFilePath) {if (LogUtils.DEBUG) {LogUtils.e("filePath " + filePath);LogUtils.e("newFilePath " + newFilePath);}if (!TextUtils.isEmpty(filePath)) {final File file = new File(filePath);final File newFile = new File(newFilePath);if (file.exists()) {return file.renameTo(newFile);}}return false;
}   /*** 删除文件** @param filePath* @return*/
public static boolean deleteFile(String filePath) {if (LogUtils.DEBUG) {LogUtils.e("deleteFile path " + filePath);}if (!TextUtils.isEmpty(filePath)) {final File file = new File(filePath);if (LogUtils.DEBUG) {LogUtils.e("deleteFile path exists " + file.exists());}if (file.exists()) {return file.delete();}}return false;
}/*** 删除文件夹下所有文件** @return*/
public static void deleteDirectoryAllFile(String directoryPath) {final File file = new File(directoryPath);deleteDirectoryAllFile(file);
}public static void deleteDirectoryAllFile(File file) {if (!file.exists()) {return;}boolean rslt = true;// 保存中间结果if (!(rslt = file.delete())) {// 先尝试直接删除// 若文件夹非空。枚举、递归删除里面内容final File subs[] = file.listFiles();final int size = subs.length - 1;for (int i = 0; i <= size; i++) {if (subs[i].isDirectory())deleteDirectoryAllFile(subs[i]);// 递归删除子文件夹内容rslt = subs[i].delete();// 删除子文件夹本身}// rslt = file.delete();// 删除此文件夹本身}if (!rslt) {if (LogUtils.DEBUG) {LogUtils.w("无法删除:" + file.getName());}return;}
}/*** 根据后缀名删除文件** @param delpath*            path of file* @param delEndName*            end name of file* @return boolean the result*/
public static boolean deleteEndFile(String delPath, String delEndName) {// param is nullif (delPath == null || delEndName == null) {return false;}try {// create filefinal File file = new File(delPath);if (file != null) {if (file.isDirectory()) {// file listString[] fileList = file.list();File delFile = null;// diguifinal int size = fileList.length;for (int i = 0; i < size; i++) {// create new filedelFile = new File(delPath + "/" + fileList[i]);if (delFile != null && delFile.isFile()) {// 删除该文件夹下所有文件以delEndName为后缀的文件(不包含子文件夹里的文件)// if (delFile != null) {//// 删除该文件夹下所有文件以delEndName为后缀的文件(包含子文件夹里的文件)deleteEndFile(delFile.toString(), delEndName);} else {// nothing}}} else if (file.isFile()) {// check the end nameif (file.toString().contains(".")&& file.toString().substring((file.toString().lastIndexOf(".") + 1)).equals(delEndName)) {// file deletefile.delete();}}}} catch (Exception ex) {if (LogUtils.DEBUG) {LogUtils.e(ex);}return false;}return true;
}/*** 删除文件夹内所有文件** @param delpath*            delpath path of file* @return boolean the result*/
public static boolean deleteAllFile(String delpath) {try {// create filefinal File file = new File(delpath);if (!file.isDirectory()) {file.delete();} else if (file.isDirectory()) {final String[] filelist = file.list();final int size = filelist.length;for (int i = 0; i < size; i++) {// create new filefinal File delfile = new File(delpath + "/" + filelist[i]);if (!delfile.isDirectory()) {delfile.delete();} else if (delfile.isDirectory()) {// diguideleteFile(delpath + "/" + filelist[i]);}}file.delete();}} catch (Exception ex) {if (LogUtils.DEBUG) {LogUtils.e(ex);}return false;}return true;
}/*** 删除目录(文件夹)以及目录下的文件** @param sPath*            被删除目录的文件路径* @return 目录删除成功返回true,否则返回false*/
public static boolean deleteDirectory(String sPath) {if (TextUtils.isEmpty(sPath)) {return false;}boolean flag;// 如果sPath不以文件分隔符结尾,自动添加文件分隔符if (!sPath.endsWith(File.separator)) {sPath = sPath + File.separator;}final File dirFile = new File(sPath);// 如果dir对应的文件不存在,或者不是一个目录,则退出if (!dirFile.exists() || !dirFile.isDirectory()) {return false;}flag = true;// 删除文件夹下的所有文件(包括子目录)final File[] files = dirFile.listFiles();if (files != null && files.length > 0) {for (int i = 0; i < files.length; i++) {// 删除子文件if (files[i].isFile()) {flag = deleteFile(files[i].getAbsolutePath());if (!flag)break;} // 删除子目录else {flag = deleteDirectory(files[i].getAbsolutePath());if (!flag)break;}}}if (!flag)return false;// 删除当前目录if (dirFile.delete()) {return true;} else {return false;}
}/*** 获取后缀名** @param path*            全路径* @return*/
public static String getFileExtName(String path) {String ext = "";if ((path != null) && (path.length() > 0)) {int dot = path.lastIndexOf('.');if ((dot > -1) && (dot < (path.length() - 1))) {ext = path.substring(dot + 1);}}return ext;
}/*** 获取文件名** @param path*            全路径* @return*/
public static String getFileName(String path) {if (!TextUtils.isEmpty(path)) {return path.substring(path.lastIndexOf(File.separator) + 1);}return "";
}/*** 获取文件所在的文件路径** @param path* @return*/
public static String getFilePath(String path) {return path.substring(0, path.lastIndexOf(File.separator) + 1);
}/*** 复制文件** @param srcPath : 源文件全路径* @param destPath : 目标文件全路径* @return*/
public static long copyFile(String srcPath, String destPath) {try {int position = destPath.lastIndexOf(File.separator);String dir = destPath.substring(0, position);String newFileName = destPath.substring(position+1);final File cacheDir = new File(dir);if (!cacheDir.exists()) {cacheDir.mkdirs();}return copyFile(new File(srcPath), new File(dir), newFileName);} catch (Exception e) {return 0;}}/*** 复制文件(以超快的速度复制文件)** @param srcFile*            源文件File* @param destDir*            目标目录File* @param newFileName*            新文件名* @return 实际复制的字节数,如果文件、目录不存在、文件为null或者发生IO异常,返回-1*/
@SuppressWarnings("resource")
public static long copyFile(final File srcFile, final File destDir, String newFileName) {long copySizes = 0;if (!srcFile.exists()) {if (LogUtils.DEBUG) {LogUtils.d("源文件不存在");}copySizes = -1;} else if (!destDir.exists()) {if (LogUtils.DEBUG) {LogUtils.d("目标目录不存在");}copySizes = -1;} else if (newFileName == null) {if (LogUtils.DEBUG) {LogUtils.d("文件名为null");}copySizes = -1;} else {FileChannel fcin = null;FileChannel fcout = null;try {fcin = new FileInputStream(srcFile).getChannel();fcout = new FileOutputStream(new File(destDir, newFileName)).getChannel();long size = fcin.size();fcin.transferTo(0, fcin.size(), fcout);copySizes = size;} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {try {if (fcin != null) {fcin.close();}if (fcout != null) {fcout.close();}} catch (IOException e) {e.printStackTrace();}}}return copySizes;
}/*** 判断asset下是否存在某个文件** @param context* @param fileName*            如:aa.txt或image/aa.jpg* @return*/
public static boolean existInAsset(Context context, String fileName) {boolean exist = false;try {String[] u = context.getAssets().list(getFilePath(fileName));for (String item : u) {if (item.equals(getFileName(fileName))) {exist = true;break;}}} catch (IOException e) {e.printStackTrace();}return exist;
}/*** 获取目录文件个数** @param f* @return*/
public static long getlist(File f) {long size = 0;try {File flist[] = f.listFiles();size = flist.length;for (int i = 0; i < flist.length; i++) {final File file = flist[i];if (file == null) {continue;}if (file.isDirectory()) {size = size + getlist(file);size--;}}} catch (Exception e) {e.printStackTrace();}return size;
}/*** 获取文件夹下所有文件大小** @param f* @return*/
public static long getFileSize(File f) {long size = 0;try {File flist[] = f.listFiles();for (int i = 0; i < flist.length; i++) {final File file = flist[i];if (file == null) {continue;}if (file.isDirectory()) {size = size + getFileSize(file);} else {size = size + file.length();}}} catch (Exception e) {e.printStackTrace();}return size;
}/*** 调用此方法自动计算指定文件或指定文件夹的大小** @param filePath 文件路径* @return 计算好的带B、KB、MB、GB的字符串*/
public static String getAutoFileOrFilesSize(File file) {if (file == null) {return "0B";}final long blockSize = getFileSize(file);if (LogUtils.DEBUG) {LogUtils.d("getAutoFileOrFilesSize 文件大小:" + blockSize);}return FormetFileSize(blockSize);
}/*** 转换文件大小* @param fileS* @return*/
private static String FormetFileSize(long fileS) {final DecimalFormat df = new DecimalFormat("#.00");String fileSizeString = "";String wrongSize = "0B";if (fileS == 0) {return wrongSize;}if (fileS < 1024) {fileSizeString = df.format((double) fileS) + "B";} else if (fileS < 1048576) {fileSizeString = df.format((double) fileS / 1024) + "KB";} else if (fileS < 1073741824) {fileSizeString = df.format((double) fileS / 1048576) + "MB";} else {fileSizeString = df.format((double) fileS / 1073741824) + "GB";}return fileSizeString;
}/*** 将字符串写入到文本文件中** @param strcontent*/
public static void writeFileSdcard(String strcontent) {SimpleDateFormat formatter = new SimpleDateFormat("yyyy年MM月dd日   HH:mm:ss");Date curDate = new Date(System.currentTimeMillis());// 获取当前时间String str = formatter.format(curDate);// 每次写入时,都换行写String strContent = "-------当前时间===" + str + "\r\n" + strcontent + "\r\n";try {String strFilePath = Environment.getExternalStorageDirectory() + "/lunxun.text";File file = new File(strFilePath);if (!file.exists()) {Log.d("TestFile", "Create the file:" + strFilePath);file.createNewFile();}RandomAccessFile raf = new RandomAccessFile(file, "rw");raf.seek(file.length());raf.write(strContent.getBytes());raf.close();} catch (Exception e) {Log.e("TestFile", "Error on write File.");}
}

}

这篇关于你想要的这都有-Android文件工具类FileUtils的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1020441

相关文章

高效录音转文字:2024年四大工具精选!

在快节奏的工作生活中,能够快速将录音转换成文字是一项非常实用的能力。特别是在需要记录会议纪要、讲座内容或者是采访素材的时候,一款优秀的在线录音转文字工具能派上大用场。以下推荐几个好用的录音转文字工具! 365在线转文字 直达链接:https://www.pdf365.cn/ 365在线转文字是一款提供在线录音转文字服务的工具,它以其高效、便捷的特点受到用户的青睐。用户无需下载安装任何软件,只

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

android-opencv-jni

//------------------start opencv--------------------@Override public void onResume(){ super.onResume(); //通过OpenCV引擎服务加载并初始化OpenCV类库,所谓OpenCV引擎服务即是 //OpenCV_2.4.3.2_Manager_2.4_*.apk程序包,存

从状态管理到性能优化:全面解析 Android Compose

文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compose中的列表和滚动

超强的截图工具:PixPin

你是否还在为寻找一款功能强大、操作简便的截图工具而烦恼?市面上那么多工具,常常让人无从选择。今天,想给大家安利一款神器——PixPin,一款真正解放双手的截图工具。 想象一下,你只需要按下快捷键就能轻松完成多种截图任务,还能快速编辑、标注甚至保存多种格式的图片。这款工具能满足这些需求吗? PixPin不仅支持全屏、窗口、区域截图等基础功能,它还可以进行延时截图,让你捕捉到每个关键画面。不仅如此

Android 10.0 mtk平板camera2横屏预览旋转90度横屏拍照图片旋转90度功能实现

1.前言 在10.0的系统rom定制化开发中,在进行一些平板等默认横屏的设备开发的过程中,需要在进入camera2的 时候,默认预览图像也是需要横屏显示的,在上一篇已经实现了横屏预览功能,然后发现横屏预览后,拍照保存的图片 依然是竖屏的,所以说同样需要将图片也保存为横屏图标了,所以就需要看下mtk的camera2的相关横屏保存图片功能, 如何实现实现横屏保存图片功能 如图所示: 2.mtk

android应用中res目录说明

Android应用的res目录是一个特殊的项目,该项目里存放了Android应用所用的全部资源,包括图片、字符串、颜色、尺寸、样式等,类似于web开发中的public目录,js、css、image、style。。。。 Android按照约定,将不同的资源放在不同的文件夹中,这样可以方便的让AAPT(即Android Asset Packaging Tool , 在SDK的build-tools目

Android fill_parent、match_parent、wrap_content三者的作用及区别

这三个属性都是用来适应视图的水平或者垂直大小,以视图的内容或尺寸为基础的布局,比精确的指定视图的范围更加方便。 1、fill_parent 设置一个视图的布局为fill_parent将强制性的使视图扩展至它父元素的大小 2、match_parent 和fill_parent一样,从字面上的意思match_parent更贴切一些,于是从2.2开始,两个属性都可以使用,但2.3版本以后的建议使