/**
- Created by mythmayor on 2016/12/26.
*/
public class FileUtil {
/**
-
递归计算文件夹大小
-
@param f
-
@return
-
@throws Exception
*/
public static long getFileSize(File f) throws Exception {
long size = 0;
File[] flist = f.listFiles();
for (int i = 0; i < flist.length; i++) {
if (flist[i].isDirectory()) {
size = size + getFileSize(flist[i]);
} else {
size = size + flist[i].length();
}
}
return size;
}
/**
-
得到字符串方式的文件大小
-
@param fileS ,单位b
-
@return
*/
public static String FormetFileSize(long fileS) {
DecimalFormat df = new DecimalFormat(“0.00”);
String fileSizeString;
if (fileS < 1024) {
fileSizeString = df.format((double) fileS) + “B”;
} else if (fileS < 1048576) {
fileSizeString = df.format((double) fileS / 1024) + “K”;
} else if (fileS < 1073741824) {
fileSizeString = df.format((double) fileS / 1048576) + “M”;
} else {
fileSizeString = df.format((double) fileS / 1073741824) + “G”;
}
return fileSizeString;
}
}
5.DensityUtil.class(单位转换和获取屏幕宽高的工具类)
import android.app.Activity;
import android.content.Context;
import android.util.DisplayMetrics;
/**
- Created by mythmayor on 2016/12/14.
*/
public class DensityUtil {
/**
-
将px值转换为 dip或dp值,保证尺寸大小不变
-
@param pxValue 像素值
-
@param context Context 对象
-
@return dp值
*/
public static int px2dip(float pxValue, Context context) {
float scale = getDensity(context);
return (int) (pxValue / scale + 0.5f);
}
/**
-
将dip或dp值转换为px值,保证尺寸大小不变
-
@param dipValue dip数值
-
@param context Context 对象
-
@return 像素值
*/
public static int dip2px(float dipValue, Context context) {
float scale = getDensity(context);
return (int) (dipValue * scale + 0.5f);
}
/**
-
将px值转换为sp值,保证文字大小不变
-
@param pxValue 像素值
-
@param context Context 对象
-
@return 返回sp数值
*/
public static int px2sp(float pxValue, Context context) {
float scale = getDensity(context);
return (int) (pxValue / scale + 0.5f);
}
/**
-
将sp值转换为px值,保证文字大小不变
-
@param spValue sp数值
-
@param context Context 对象
-
@return 返回像素值
*/
public static int sp2px(float spValue, Context context) {
float scale = getDensity(context);
return (int) (spValue * scale + 0.5f);
}
/**
-
取得手机屏幕的密度
-
@param context 上下文
-
@return 手机屏幕的密度
*/
public static float getDensity(Context context) {
float scale = context.getResources().getDisplayMetrics().density;
return scale;
}
/**
-
获取屏幕高
-
@param activity
-
@return 手机屏幕的高度
*/
public static int getScreenHeight(Activity activity) {
DisplayMetrics dm = new DisplayMetrics();
activity.getWindowManager().getDefaultDisplay().getMetrics(dm);
return dm.heightPixels;
}
/**
-
获取屏幕宽
-
@param activity
-
@return 手机屏幕的宽度
*/
public static int getScreenWidth(Activity activity) {
DisplayMetrics dm = new DisplayMetrics();
activity.getWindowManager().getDefaultDisplay().getMetrics(dm);
return dm.widthPixels;
}
}
6.ResourceUtil.class(获取资源文件的工具类)
import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.util.DisplayMetrics;
public class CommonUtil {
/**
- 获取Resource对象
*/
public static Resources getResources() {
return MainApplication.getContext().getResources();
}
/**
- 获取Drawable资源
*/
public static Drawable getDrawable(int resId) {
return getResources().getDrawable(resId);
}
/**
- 获取字符串资源
*/
public static String getString(int resId) {
return getResources().getString(resId);
}
/**
- 获取color资源
*/
public static int getColor(int resId) {
return getResources().getColor(resId);
}
/**
- 获取dimens资源
*/
public static float getDimens(int resId) {
return getResources().getDimension(resId);
}
/**
- 获取字符串数组资源
*/
public static String[] getStringArray(int resId) {
return getResources().getStringArray(resId);
}
7.DateUtil.class(日期时间转换的工具类)
import android.annotation.SuppressLint;
import android.text.format.Time;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
-
时间、日期转换工具
-
Created by mythmayor on 2016/9/14.
*/
public class DateUtils {
/**
-
获取当前时间
-
@return 年月日时分秒字符串
*/
public static String getCurrentTime() {
Time time = new Time(“GMT+8”);
time.setToNow();
String year = “” + time.year;
int imonth = time.month + 1;
String month = imonth > 9 ? “” + imonth : “0” + imonth;
String day = time.monthDay > 9 ? “” + time.monthDay : “0”
- time.monthDay;
String hour = (time.hour + 8) > 9 ? “” + (time.hour + 8) : “0”
- (time.hour + 8);
String minute = time.minute > 9 ? “” + time.minute : “0” + time.minute;
String sec = time.second > 9 ? “” + time.second : “0” + time.second;
String currentTime = year + month + day + hour + minute + sec;
return currentTime;
}
//获取 日期/时/分/秒
@SuppressLint(“SimpleDateFormat”)
public static String getDateTime(long time) {
SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);
String date = sdf.format(new Date(time));
return date;
}
//获取 日期/时/分
@SuppressLint(“SimpleDateFormat”)
public static String getHourMinute(long time) {
SimpleDateFormat sdf = new SimpleDateFormat(“yyyy年MM月dd日HH时mm分”);
String date = sdf.format(new Date(time));
return date;
}
//获取 日期年月日
@SuppressLint(“SimpleDateFormat”)
public static String getYearMonthDay(long time) {
SimpleDateFormat sdf = new SimpleDateFormat(“yyyy年MM月dd日”);
String date = sdf.format(new Date(time));
return date;
}
//获取日期年月
public static String getYearMonth(long time){
SimpleDateFormat sdf = new SimpleDateFormat(“yyyy年MM月”);
String date = sdf.format(new Date(time));
return date;
}
//获取日期年月
public static String getYearMonth2(long time){
SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM”);
String date = sdf.format(new Date(time));
return date;
}
//获取日期年
public static String getYear(long time){
SimpleDateFormat sdf = new SimpleDateFormat(“yyyy年”);
String date = sdf.format(new Date(time));
return date;
}
//获取 时/分
public static String getTime(long time) {
SimpleDateFormat sdf = new SimpleDateFormat(“HH:mm”);
String date = sdf.format(new Date(time));
return date;
}
}
8.GlideCacheUtil.class(管理Glide产生的缓存的工具类)
/**
- Created by mythmayor on 2017/2/22.
*/
import android.content.Context;
import android.os.Looper;
import android.text.TextUtils;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.cache.ExternalCacheDiskCacheFactory;
import com.bumptech.glide.load.engine.cache.InternalCacheDiskCacheFactory;
import java.io.File;
import java.math.BigDecimal;
/**Glide缓存工具类
- Created by mythmayor on 2016/10/10.
*/
public class GlideCacheUtil {
private static GlideCacheUtil inst;
public static GlideCacheUtil getInstance() {
if (inst == null) {
inst = new GlideCacheUtil();
}
return inst;
}
/**
- 清除图片磁盘缓存
*/
public void clearImageDiskCache(final Context context) {
try {
if (Looper.myLooper() == Looper.getMainLooper()) {
new Thread(new Runnable() {
@Override
public void run() {
Glide.get(context).clearDiskCache();
// BusUtil.getBus().post(new GlideCacheClearSuccessEvent());
}
}).start();
} else {
Glide.get(context).clearDiskCache();
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
- 清除图片内存缓存
*/
public void clearImageMemoryCache(Context context) {
try {
if (Looper.myLooper() == Looper.getMainLooper()) { //只能在主线程执行
Glide.get(context).clearMemory();
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
- 清除图片所有缓存
*/
public void clearImageAllCache(Context context) {
clearImageDiskCache(context);
clearImageMemoryCache(context);
String ImageExternalCatchDir=context.getExternalCacheDir()+ ExternalCacheDiskCacheFactory.DEFAULT_DISK_CACHE_DIR;
deleteFolderFile(ImageExternalCatchDir, true);
}
/**
-
获取Glide造成的缓存大小
-
@return CacheSize
*/
public String getCacheSize(Context context) {
try {
return getFormatSize(getFolderSize(new File(context.getCacheDir() + “/”+ InternalCacheDiskCacheFactory.DEFAULT_DISK_CACHE_DIR)));
} catch (Exception e) {
e.printStackTrace();
}
return “”;
}
/**
-
获取指定文件夹内所有文件大小的和
-
@param file file
-
@return size
-
@throws Exception
*/
private long getFolderSize(File file) throws Exception {
long size = 0;
try {
File[] fileList = file.listFiles();
for (File aFileList : fileList) {
if (aFileList.isDirectory()) {
size = size + getFolderSize(aFileList);
} else {
size = size + aFileList.length();
}
}
} catch (Exception e) {
e.printStackTrace();
}
return size;
}
/**
-
删除指定目录下的文件,这里用于缓存的删除
-
@param filePath filePath
-
@param deleteThisPath deleteThisPath
*/
private void deleteFolderFile(String filePath, boolean deleteThisPath) {
if (!TextUtils.isEmpty(filePath)) {
try {
File file = new File(filePath);
if (file.isDirectory()) {
File files[] = file.listFiles();
for (File file1 : files) {
deleteFolderFile(file1.getAbsolutePath(), true);
}
}
if (deleteThisPath) {
if (!file.isDirectory()) {
file.delete();
} else {
if (file.listFiles().length == 0) {
file.delete();
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
-
格式化单位
-
@param size size
-
@return size
*/
private static String getFormatSize(double size) {
double kiloByte = size / 1024;
if (kiloByte < 1) {
return size + “B”;
}
double megaByte = kiloByte / 1024;
if (megaByte < 1) {
BigDecimal result1 = new BigDecimal(Double.toString(kiloByte));
return result1.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + “KB”;
}
double gigaByte = megaByte / 1024;
if (gigaByte < 1) {
BigDecimal result2 = new BigDecimal(Double.toString(megaByte));
return result2.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + “MB”;
}
double teraBytes = gigaByte / 1024;
if (teraBytes < 1) {
BigDecimal result3 = new BigDecimal(Double.toString(gigaByte));
return result3.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + “GB”;
}
BigDecimal result4 = new BigDecimal(teraBytes);
return result4.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + “TB”;
}
}
9.JsonUtil.class(管理Json数据的工具类)
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
学习分享
①「Android面试真题解析大全」PDF完整高清版+②「Android面试知识体系」学习思维导图压缩包——————可以点击我的【Github】免费下载,最后觉得有帮助、有需要的朋友可以点个赞
n数据的工具类)
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-GsUvNQnT-1711131427943)]
[外链图片转存中…(img-HNbx5Phe-1711131427944)]
[外链图片转存中…(img-pzID7bdX-1711131427945)]
[外链图片转存中…(img-PRSvtBwh-1711131427945)]
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
[外链图片转存中…(img-QwfSw1Uj-1711131427946)]
学习分享
①「Android面试真题解析大全」PDF完整高清版+②「Android面试知识体系」学习思维导图压缩包——————可以点击我的【Github】免费下载,最后觉得有帮助、有需要的朋友可以点个赞
[外链图片转存中…(img-Cyah87eS-1711131427946)]
[外链图片转存中…(img-4OiRhjNK-1711131427947)]
[外链图片转存中…(img-ITHmS2a5-1711131427947)]