android开发工具类总结(一)

一、日志工具类 Log.java

 1 public class L  
 2 {  
 3     private L()  
 4     {  
 5         /* 不可被实例化 */  
 6         throw new UnsupportedOperationException("Cannot be instantiated!");  
 7     }  
 8     // 是否需要打印bug,可以在application的onCreate函数里面初始化  
 9     public static boolean isDebug = true; 
10     private static final String TAG = "DefaultTag";  
11 
12     // 下面四个是默认tag的函数  
13     public static void i(String msg)  
14     {  
15         if (isDebug)  
16             Log.i(TAG, msg);  
17     }  
18 
19     public static void d(String msg)  
20     {  
21         if (isDebug)  
22             Log.d(TAG, msg);  
23     }  
24 
25     public static void e(String msg)  
26     {  
27         if (isDebug)  
28             Log.e(TAG, msg);  
29     }  
30 
31     public static void v(String msg)  
32     {  
33         if (isDebug)  
34             Log.v(TAG, msg);  
35     }  
36 
37     // 下面是传入自定义tag的函数  
38     public static void i(String tag, String msg)  
39     {  
40         if (isDebug)  
41             Log.i(tag, msg);  
42     }  
43 
44     public static void d(String tag, String msg)  
45     {  
46         if (isDebug)  
47             Log.i(tag, msg);  
48     }  
49 
50     public static void e(String tag, String msg)  
51     {  
52         if (isDebug)  
53             Log.i(tag, msg);  
54     }  
55 
56     public static void v(String tag, String msg)  
57     {  
58         if (isDebug)  
59             Log.i(tag, msg);  
60     }  
61 }  

二、Toast统一管理类 Tost.java

public class T  
{  

    private T()  
    {  
        /* cannot be instantiated */  
        throw new UnsupportedOperationException("cannot be instantiated");  
    }  

    public static boolean isShow = true;  

    /** 
     * 短时间显示Toast 
     */  
    public static void showShort(Context context, CharSequence message)  
    {  
        if (isShow)  
            Toast.makeText(context, message, Toast.LENGTH_SHORT).show();  
    }  

    /** 
     * 短时间显示Toast 
     * @param message 要显示的字符串资源的id
     */  
    public static void showShort(Context context, int message)  
    {  
        if (isShow)  
            Toast.makeText(context, message, Toast.LENGTH_SHORT).show();  
    }  

    /** 
     * 长时间显示Toast 
     */  
    public static void showLong(Context context, CharSequence message)  
    {  
        if (isShow)  
            Toast.makeText(context, message, Toast.LENGTH_LONG).show();  
    }  

    /** 
     * 长时间显示Toast 
     */  
    public static void showLong(Context context, int message)  
    {  
        if (isShow)  
            Toast.makeText(context, message, Toast.LENGTH_LONG).show();  
    }  

    /** 
     * 自定义显示Toast时间 
     */  
    public static void show(Context context, CharSequence message, int duration)  
    {  
        if (isShow)  
            Toast.makeText(context, message, duration).show();  
    }  

    /** 
     * 自定义显示Toast时间 
     */  
    public static void show(Context context, int message, int duration)  
    {  
        if (isShow)  
            Toast.makeText(context, message, duration).show();  
    }  

}  

三、SharedPreferences封装类 SPUtils.java 和 PreferencesUtils.java

1. SPUtils.java
  1 public class SPUtils  
  2 {  
  3     /** 
  4      * 保存在手机里面的文件名 
  5      */  
  6     public static final String FILE_NAME = "share_data";  
  7 
  8     /** 
  9      * 保存数据的方法,我们需要拿到保存数据的具体类型,然后根据类型调用不同的保存方法 
 10      *  
 11      * @param context 
 12      * @param key 
 13      * @param object 
 14      */  
 15     public static void put(Context context, String key, Object object)  
 16     {  
 17 
 18         SharedPreferences sp = context.getSharedPreferences(FILE_NAME,  
 19                 Context.MODE_PRIVATE);  
 20         SharedPreferences.Editor editor = sp.edit();  
 21 
 22         if (object instanceof String)  
 23         {  
 24             editor.putString(key, (String) object);  
 25         } else if (object instanceof Integer)  
 26         {  
 27             editor.putInt(key, (Integer) object);  
 28         } else if (object instanceof Boolean)  
 29         {  
 30             editor.putBoolean(key, (Boolean) object);  
 31         } else if (object instanceof Float)  
 32         {  
 33             editor.putFloat(key, (Float) object);  
 34         } else if (object instanceof Long)  
 35         {  
 36             editor.putLong(key, (Long) object);  
 37         } else  
 38         {  
 39             editor.putString(key, object.toString());  
 40         }  
 41 
 42         SharedPreferencesCompat.apply(editor);  
 43     }  
 44 
 45     /** 
 46      * 得到保存数据的方法,我们根据默认值得到保存的数据的具体类型,然后调用相对于的方法获取值 
 47      *  
 48      * @param context 
 49      * @param key 
 50      * @param defaultObject 
 51      * @return 
 52      */  
 53     public static Object get(Context context, String key, Object defaultObject)  
 54     {  
 55         SharedPreferences sp = context.getSharedPreferences(FILE_NAME,  
 56                 Context.MODE_PRIVATE);  
 57 
 58         if (defaultObject instanceof String)  
 59         {  
 60             return sp.getString(key, (String) defaultObject);  
 61         } else if (defaultObject instanceof Integer)  
 62         {  
 63             return sp.getInt(key, (Integer) defaultObject);  
 64         } else if (defaultObject instanceof Boolean)  
 65         {  
 66             return sp.getBoolean(key, (Boolean) defaultObject);  
 67         } else if (defaultObject instanceof Float)  
 68         {  
 69             return sp.getFloat(key, (Float) defaultObject);  
 70         } else if (defaultObject instanceof Long)  
 71         {  
 72             return sp.getLong(key, (Long) defaultObject);  
 73         }  
 74 
 75         return null;  
 76     }  
 77 
 78     /** 
 79      * 移除某个key值已经对应的值 
 80      * @param context 
 81      * @param key 
 82      */  
 83     public static void remove(Context context, String key)  
 84     {  
 85         SharedPreferences sp = context.getSharedPreferences(FILE_NAME,  
 86                 Context.MODE_PRIVATE);  
 87         SharedPreferences.Editor editor = sp.edit();  
 88         editor.remove(key);  
 89         SharedPreferencesCompat.apply(editor);  
 90     }  
 91 
 92     /** 
 93      * 清除所有数据 
 94      * @param context 
 95      */  
 96     public static void clear(Context context)  
 97     {  
 98         SharedPreferences sp = context.getSharedPreferences(FILE_NAME,  
 99                 Context.MODE_PRIVATE);  
100         SharedPreferences.Editor editor = sp.edit();  
101         editor.clear();  
102         SharedPreferencesCompat.apply(editor);  
103     }  
104 
105     /** 
106      * 查询某个key是否已经存在 
107      * @param context 
108      * @param key 
109      * @return 
110      */  
111     public static boolean contains(Context context, String key)  
112     {  
113         SharedPreferences sp = context.getSharedPreferences(FILE_NAME,  
114                 Context.MODE_PRIVATE);  
115         return sp.contains(key);  
116     }  
117 
118     /** 
119      * 返回所有的键值对 
120      *  
121      * @param context 
122      * @return 
123      */  
124     public static Map<String, ?> getAll(Context context)  
125     {  
126         SharedPreferences sp = context.getSharedPreferences(FILE_NAME,  
127                 Context.MODE_PRIVATE);  
128         return sp.getAll();  
129     }  
130 
131     /** 
132      * 创建一个解决SharedPreferencesCompat.apply方法的一个兼容类 
133      *  
134      * @author zhy 
135      *  
136      */  
137     private static class SharedPreferencesCompat  
138     {  
139         private static final Method sApplyMethod = findApplyMethod();  
140 
141         /** 
142          * 反射查找apply的方法 
143          *  
144          * @return 
145          */  
146         @SuppressWarnings({ "unchecked", "rawtypes" })  
147         private static Method findApplyMethod()  
148         {  
149             try  
150             {  
151                 Class clz = SharedPreferences.Editor.class;  
152                 return clz.getMethod("apply");  
153             } catch (NoSuchMethodException e)  
154             {  
155             }  
156 
157             return null;  
158         }  
159 
160         /** 
161          * 如果找到则使用apply执行,否则使用commit 
162          *  
163          * @param editor 
164          */  
165         public static void apply(SharedPreferences.Editor editor)  
166         {  
167             try  
168             {  
169                 if (sApplyMethod != null)  
170                 {  
171                     sApplyMethod.invoke(editor);  
172                     return;  
173                 }  
174             } catch (IllegalArgumentException e)  
175             {  
176             } catch (IllegalAccessException e)  
177             {  
178             } catch (InvocationTargetException e)  
179             {  
180             }  
181             editor.commit();  
182         }  
183     }  
184 
185 }  

对SharedPreference的使用做了建议的封装,对外公布出put,get,remove,clear等等方法;

  • 注意一点,里面所有的commit操作使用了SharedPreferencesCompat.apply进行了替代,目的是尽可能的使用apply代替commit.
  • 首先说下为什么,因为commit方法是同步的,并且我们很多时候的commit操作都是UI线程中,毕竟是IO操作,尽可能异步;
  • 所以我们使用apply进行替代,apply异步的进行写入;
  • 但是apply相当于commit来说是new API呢,为了更好的兼容,我们做了适配;
  • SharedPreferencesCompat也可以给大家创建兼容类提供了一定的参考
2. SPUtils.java
  1 public class PreferencesUtils {
  2 
  3     public static String PREFERENCE_NAME = "TrineaAndroidCommon";
  4 
  5     private PreferencesUtils() {
  6         throw new AssertionError();
  7     }
  8 
  9     /**
 10      * put string preferences
 11      * 
 12      * @param context
 13      * @param key The name of the preference to modify
 14      * @param value The new value for the preference
 15      * @return True if the new values were successfully written to persistent storage.
 16      */
 17     public static boolean putString(Context context, String key, String value) {
 18         SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
 19         SharedPreferences.Editor editor = settings.edit();
 20         editor.putString(key, value);
 21         return editor.commit();
 22     }
 23 
 24     /**
 25      * get string preferences
 26      * 
 27      * @param context
 28      * @param key The name of the preference to retrieve
 29      * @return The preference value if it exists, or null. Throws ClassCastException if there is a preference with this
 30      *         name that is not a string
 31      * @see #getString(Context, String, String)
 32      */
 33     public static String getString(Context context, String key) {
 34         return getString(context, key, null);
 35     }
 36 
 37     /**
 38      * get string preferences
 39      * 
 40      * @param context
 41      * @param key The name of the preference to retrieve
 42      * @param defaultValue Value to return if this preference does not exist
 43      * @return The preference value if it exists, or defValue. Throws ClassCastException if there is a preference with
 44      *         this name that is not a string
 45      */
 46     public static String getString(Context context, String key, String defaultValue) {
 47         SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
 48         return settings.getString(key, defaultValue);
 49     }
 50 
 51     /**
 52      * put int preferences
 53      * 
 54      * @param context
 55      * @param key The name of the preference to modify
 56      * @param value The new value for the preference
 57      * @return True if the new values were successfully written to persistent storage.
 58      */
 59     public static boolean putInt(Context context, String key, int value) {
 60         SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
 61         SharedPreferences.Editor editor = settings.edit();
 62         editor.putInt(key, value);
 63         return editor.commit();
 64     }
 65 
 66     /**
 67      * get int preferences
 68      * 
 69      * @param context
 70      * @param key The name of the preference to retrieve
 71      * @return The preference value if it exists, or -1. Throws ClassCastException if there is a preference with this
 72      *         name that is not a int
 73      * @see #getInt(Context, String, int)
 74      */
 75     public static int getInt(Context context, String key) {
 76         return getInt(context, key, -1);
 77     }
 78 
 79     /**
 80      * get int preferences
 81      * 
 82      * @param context
 83      * @param key The name of the preference to retrieve
 84      * @param defaultValue Value to return if this preference does not exist
 85      * @return The preference value if it exists, or defValue. Throws ClassCastException if there is a preference with
 86      *         this name that is not a int
 87      */
 88     public static int getInt(Context context, String key, int defaultValue) {
 89         SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
 90         return settings.getInt(key, defaultValue);
 91     }
 92 
 93     /**
 94      * put long preferences
 95      * 
 96      * @param context
 97      * @param key The name of the preference to modify
 98      * @param value The new value for the preference
 99      * @return True if the new values were successfully written to persistent storage.
100      */
101     public static boolean putLong(Context context, String key, long value) {
102         SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
103         SharedPreferences.Editor editor = settings.edit();
104         editor.putLong(key, value);
105         return editor.commit();
106     }
107 
108     /**
109      * get long preferences
110      * 
111      * @param context
112      * @param key The name of the preference to retrieve
113      * @return The preference value if it exists, or -1. Throws ClassCastException if there is a preference with this
114      *         name that is not a long
115      * @see #getLong(Context, String, long)
116      */
117     public static long getLong(Context context, String key) {
118         return getLong(context, key, -1);
119     }
120 
121     /**
122      * get long preferences
123      * 
124      * @param context
125      * @param key The name of the preference to retrieve
126      * @param defaultValue Value to return if this preference does not exist
127      * @return The preference value if it exists, or defValue. Throws ClassCastException if there is a preference with
128      *         this name that is not a long
129      */
130     public static long getLong(Context context, String key, long defaultValue) {
131         SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
132         return settings.getLong(key, defaultValue);
133     }
134 
135     /**
136      * put float preferences
137      * 
138      * @param context
139      * @param key The name of the preference to modify
140      * @param value The new value for the preference
141      * @return True if the new values were successfully written to persistent storage.
142      */
143     public static boolean putFloat(Context context, String key, float value) {
144         SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
145         SharedPreferences.Editor editor = settings.edit();
146         editor.putFloat(key, value);
147         return editor.commit();
148     }
149 
150     /**
151      * get float preferences
152      * 
153      * @param context
154      * @param key The name of the preference to retrieve
155      * @return The preference value if it exists, or -1. Throws ClassCastException if there is a preference with this
156      *         name that is not a float
157      * @see #getFloat(Context, String, float)
158      */
159     public static float getFloat(Context context, String key) {
160         return getFloat(context, key, -1);
161     }
162 
163     /**
164      * get float preferences
165      * 
166      * @param context
167      * @param key The name of the preference to retrieve
168      * @param defaultValue Value to return if this preference does not exist
169      * @return The preference value if it exists, or defValue. Throws ClassCastException if there is a preference with
170      *         this name that is not a float
171      */
172     public static float getFloat(Context context, String key, float defaultValue) {
173         SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
174         return settings.getFloat(key, defaultValue);
175     }
176 
177     /**
178      * put boolean preferences
179      * 
180      * @param context
181      * @param key The name of the preference to modify
182      * @param value The new value for the preference
183      * @return True if the new values were successfully written to persistent storage.
184      */
185     public static boolean putBoolean(Context context, String key, boolean value) {
186         SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
187         SharedPreferences.Editor editor = settings.edit();
188         editor.putBoolean(key, value);
189         return editor.commit();
190     }
191 
192     /**
193      * get boolean preferences, default is false
194      * 
195      * @param context
196      * @param key The name of the preference to retrieve
197      * @return The preference value if it exists, or false. Throws ClassCastException if there is a preference with this
198      *         name that is not a boolean
199      * @see #getBoolean(Context, String, boolean)
200      */
201     public static boolean getBoolean(Context context, String key) {
202         return getBoolean(context, key, false);
203     }
204 
205     /**
206      * get boolean preferences
207      * 
208      * @param context
209      * @param key The name of the preference to retrieve
210      * @param defaultValue Value to return if this preference does not exist
211      * @return The preference value if it exists, or defValue. Throws ClassCastException if there is a preference with
212      *         this name that is not a boolean
213      */
214     public static boolean getBoolean(Context context, String key, boolean defaultValue) {
215         SharedPreferences settings = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
216         return settings.getBoolean(key, defaultValue);
217     }
218 }

四、单位转换类 DensityUtils.java

 1 public class DensityUtils  
 2 {  
 3     private DensityUtils()  
 4     {  
 5         /* cannot be instantiated */  
 6         throw new UnsupportedOperationException("cannot be instantiated");  
 7     }  
 8 
 9     /** 
10      * dp转px 
11      *  
12      * @param context 
13      * @param val 
14      * @return 
15      */  
16     public static int dp2px(Context context, float dpVal)  
17     {  
18         return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,  
19                 dpVal, context.getResources().getDisplayMetrics());  
20     }  
21 
22     /** 
23      * sp转px 
24      *  
25      * @param context 
26      * @param val 
27      * @return 
28      */  
29     public static int sp2px(Context context, float spVal)  
30     {  
31         return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP,  
32                 spVal, context.getResources().getDisplayMetrics());  
33     }  
34 
35     /** 
36      * px转dp 
37      *  
38      * @param context 
39      * @param pxVal 
40      * @return 
41      */  
42     public static float px2dp(Context context, float pxVal)  
43     {  
44         final float scale = context.getResources().getDisplayMetrics().density;  
45         return (pxVal / scale);  
46     }  
47 
48     /** 
49      * px转sp 
50      *  
51      * @param fontScale 
52      * @param pxVal 
53      * @return 
54      */  
55     public static float px2sp(Context context, float pxVal)  
56     {  
57         return (pxVal / context.getResources().getDisplayMetrics().scaledDensity);  
58     }  
59 
60 }  
    • TypedValue: 
      Container for a dynamically typed data value. Primarily used with Resources for holding resource values.
    • applyDimension(int unit, float value, DisplayMetrics metrics): 
      Converts an unpacked complex data value holding a dimension to its final floating point value.

五、SD卡相关辅助类 SDCardUtils.java

 1 public class SDCardUtils  
 2 {  
 3     private SDCardUtils()  
 4     {  
 5         /* cannot be instantiated */  
 6         throw new UnsupportedOperationException("cannot be instantiated");  
 7     }  
 8 
 9     /** 
10      * 判断SDCard是否可用 
11      *  
12      * @return 
13      */  
14     public static boolean isSDCardEnable()  
15     {  
16         return Environment.getExternalStorageState().equals(  
17                 Environment.MEDIA_MOUNTED);  
18 
19     }  
20 
21     /** 
22      * 获取SD卡路径 
23      *  
24      * @return 
25      */  
26     public static String getSDCardPath()  
27     {  
28         return Environment.getExternalStorageDirectory().getAbsolutePath()  
29                 + File.separator;  
30     }  
31 
32     /** 
33      * 获取SD卡的剩余容量 单位byte 
34      *  
35      * @return 
36      */  
37     public static long getSDCardAllSize()  
38     {  
39         if (isSDCardEnable())  
40         {  
41             StatFs stat = new StatFs(getSDCardPath());  
42             // 获取空闲的数据块的数量  
43             long availableBlocks = (long) stat.getAvailableBlocks() - 4;  
44             // 获取单个数据块的大小(byte)  
45             long freeBlocks = stat.getAvailableBlocks();  
46             return freeBlocks * availableBlocks;  
47         }  
48         return 0;  
49     }  
50 
51     /** 
52      * 获取指定路径所在空间的剩余可用容量字节数,单位byte 
53      *  
54      * @param filePath 
55      * @return 容量字节 SDCard可用空间,内部存储可用空间 
56      */  
57     public static long getFreeBytes(String filePath)  
58     {  
59         // 如果是sd卡的下的路径,则获取sd卡可用容量  
60         if (filePath.startsWith(getSDCardPath()))  
61         {  
62             filePath = getSDCardPath();  
63         } else  
64         {// 如果是内部存储的路径,则获取内存存储的可用容量  
65             filePath = Environment.getDataDirectory().getAbsolutePath();  
66         }  
67         StatFs stat = new StatFs(filePath);  
68         long availableBlocks = (long) stat.getAvailableBlocks() - 4;  
69         return stat.getBlockSize() * availableBlocks;  
70     }  
71 
72     /** 
73      * 获取系统存储路径 
74      *  
75      * @return 
76      */  
77     public static String getRootDirectoryPath()  
78     {  
79         return Environment.getRootDirectory().getAbsolutePath();  
80     }  
81 
82 }  

StatFs 是Android提供的一个类: 
Retrieve overall information about the space on a filesystem. This is a wrapper for Unix statvfs(). 
检索一个文件系统的整体信息空间。这是一个Unix statvfs() 包装器

六、屏幕相关辅助类 ScreenUtils.java

  1 public class ScreenUtils  
  2 {  
  3     private ScreenUtils()  
  4     {  
  5         /* cannot be instantiated */  
  6         throw new UnsupportedOperationException("cannot be instantiated");  
  7     }  
  8 
  9     /** 
 10      * 获得屏幕高度 
 11      *  
 12      * @param context 
 13      * @return 
 14      */  
 15     public static int getScreenWidth(Context context)  
 16     {  
 17         WindowManager wm = (WindowManager) context  
 18                 .getSystemService(Context.WINDOW_SERVICE);  
 19         DisplayMetrics outMetrics = new DisplayMetrics();  
 20         wm.getDefaultDisplay().getMetrics(outMetrics);  
 21         return outMetrics.widthPixels;  
 22     }  
 23 
 24     /** 
 25      * 获得屏幕宽度 
 26      *  
 27      * @param context 
 28      * @return 
 29      */  
 30     public static int getScreenHeight(Context context)  
 31     {  
 32         WindowManager wm = (WindowManager) context  
 33                 .getSystemService(Context.WINDOW_SERVICE);  
 34         DisplayMetrics outMetrics = new DisplayMetrics();  
 35         wm.getDefaultDisplay().getMetrics(outMetrics);  
 36         return outMetrics.heightPixels;  
 37     }  
 38 
 39     /** 
 40      * 获得状态栏的高度 
 41      *  
 42      * @param context 
 43      * @return 
 44      */  
 45     public static int getStatusHeight(Context context)  
 46     {  
 47 
 48         int statusHeight = -1;  
 49         try  
 50         {  
 51             Class<?> clazz = Class.forName("com.android.internal.R$dimen");  
 52             Object object = clazz.newInstance();  
 53             int height = Integer.parseInt(clazz.getField("status_bar_height")  
 54                     .get(object).toString());  
 55             statusHeight = context.getResources().getDimensionPixelSize(height);  
 56         } catch (Exception e)  
 57         {  
 58             e.printStackTrace();  
 59         }  
 60         return statusHeight;  
 61     }  
 62 
 63     /** 
 64      * 获取当前屏幕截图,包含状态栏 
 65      *  
 66      * @param activity 
 67      * @return 
 68      */  
 69     public static Bitmap snapShotWithStatusBar(Activity activity)  
 70     {  
 71         View view = activity.getWindow().getDecorView();  
 72         view.setDrawingCacheEnabled(true);  
 73         view.buildDrawingCache();  
 74         Bitmap bmp = view.getDrawingCache();  
 75         int width = getScreenWidth(activity);  
 76         int height = getScreenHeight(activity);  
 77         Bitmap bp = null;  
 78         bp = Bitmap.createBitmap(bmp, 0, 0, width, height);  
 79         view.destroyDrawingCache();  
 80         return bp;  
 81 
 82     }  
 83 
 84     /** 
 85      * 获取当前屏幕截图,不包含状态栏 
 86      *  
 87      * @param activity 
 88      * @return 
 89      */  
 90     public static Bitmap snapShotWithoutStatusBar(Activity activity)  
 91     {  
 92         View view = activity.getWindow().getDecorView();  
 93         view.setDrawingCacheEnabled(true);  
 94         view.buildDrawingCache();  
 95         Bitmap bmp = view.getDrawingCache();  
 96         Rect frame = new Rect();  
 97         activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);  
 98         int statusBarHeight = frame.top;  
 99 
100         int width = getScreenWidth(activity);  
101         int height = getScreenHeight(activity);  
102         Bitmap bp = null;  
103         bp = Bitmap.createBitmap(bmp, 0, statusBarHeight, width, height  
104                 - statusBarHeight);  
105         view.destroyDrawingCache();  
106         return bp;  
107 
108     }  
109 
110 }  

七、App相关辅助类 APPUtils.java

 1 public class AppUtils  
 2 {  
 3     private AppUtils()  
 4     {  
 5         /* cannot be instantiated */  
 6         throw new UnsupportedOperationException("cannot be instantiated");  
 7     }  
 8 
 9     /** 
10      * 获取应用程序名称 
11      */  
12     public static String getAppName(Context context)  
13     {  
14         try  
15         {  
16             PackageManager packageManager = context.getPackageManager();  
17             PackageInfo packageInfo = packageManager.getPackageInfo(  
18                     context.getPackageName(), 0);  
19             int labelRes = packageInfo.applicationInfo.labelRes;  
20             return context.getResources().getString(labelRes);  
21         } catch (NameNotFoundException e)  
22         {  
23             e.printStackTrace();  
24         }  
25         return null;  
26     }  
27 
28     /** 
29      * [获取应用程序版本名称信息] 
30      *  
31      * @param context 
32      * @return 当前应用的版本名称 
33      */  
34     public static String getVersionName(Context context)  
35     {  
36         try  
37         {  
38             PackageManager packageManager = context.getPackageManager();  
39             PackageInfo packageInfo = packageManager.getPackageInfo(  
40                     context.getPackageName(), 0);  
41             return packageInfo.versionName;  
42 
43         } catch (NameNotFoundException e)  
44         {  
45             e.printStackTrace();  
46         }  
47         return null;  
48     }  
49 
50 }  

八、软键盘相关辅助类KeyBoardUtils.java

 1 /** 
 2  * 打开或关闭软键盘 
 3  */  
 4 public class KeyBoardUtils  
 5 {  
 6     /** 
 7      * 打卡软键盘 
 8      *  
 9      * @param mEditText 输入框 
10      * @param mContext  上下文 
11      */  
12     public static void openKeybord(EditText mEditText, Context mContext)  
13     {  
14         InputMethodManager imm = (InputMethodManager) mContext  
15                 .getSystemService(Context.INPUT_METHOD_SERVICE);  
16         imm.showSoftInput(mEditText, InputMethodManager.RESULT_SHOWN);  
17         imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,  
18                 InputMethodManager.HIDE_IMPLICIT_ONLY);  
19     }  
20 
21     /** 
22      * 关闭软键盘 
23      *  
24      * @param mEditText 输入框 
25      * @param mContext  上下文 
26      */  
27     public static void closeKeybord(EditText mEditText, Context mContext)  
28     {  
29         InputMethodManager imm = (InputMethodManager) mContext  
30                 .getSystemService(Context.INPUT_METHOD_SERVICE);  
31         imm.hideSoftInputFromWindow(mEditText.getWindowToken(), 0);  
32     }  
33 }  

九、网络相关辅助类 NetUtils.java

 1 public class NetUtils 
 2 {  
 3     private NetUtils()  
 4     {  
 5         /* cannot be instantiated */  
 6         throw new UnsupportedOperationException("cannot be instantiated");  
 7     }  
 8 
 9     /** 
10      * 判断网络是否连接 
11      */  
12     public static boolean isConnected(Context context)  
13     {  
14         ConnectivityManager connectivity = (ConnectivityManager) context  
15                 .getSystemService(Context.CONNECTIVITY_SERVICE);  
16 
17         if (null != connectivity)  
18         {  
19             NetworkInfo info = connectivity.getActiveNetworkInfo();  
20             if (null != info && info.isConnected())  
21             {  
22                 if (info.getState() == NetworkInfo.State.CONNECTED)  
23                 {  
24                     return true;  
25                 }  
26             }  
27         }  
28         return false;  
29     }  
30 
31     /** 
32      * 判断是否是wifi连接 
33      */  
34     public static boolean isWifi(Context context)  
35     {  
36         ConnectivityManager cm = (ConnectivityManager) context  
37                 .getSystemService(Context.CONNECTIVITY_SERVICE);  
38 
39         if (cm == null)  
40             return false;  
41         return cm.getActiveNetworkInfo().getType() == ConnectivityManager.TYPE_WIFI;  
42 
43     }  
44 
45     /** 
46      * 打开网络设置界面 
47      */  
48     public static void openSetting(Activity activity)  
49     {  
50         Intent intent = new Intent("/");  
51         ComponentName cm = new ComponentName("com.android.settings",  
52                 "com.android.settings.WirelessSettings");  
53         intent.setComponent(cm);  
54         intent.setAction("android.intent.action.VIEW");  
55         activity.startActivityForResult(intent, 0);  
56     }  
57 
58 }  

十、Http相关辅助类 HttpUtils.java

  1 /** 
  2  * Http请求的工具类 
  3  */
  4 public class HttpUtils  
  5 {  
  6     private static final int TIMEOUT_IN_MILLIONS = 5000;  
  7 
  8     public interface CallBack  
  9     {  
 10         void onRequestComplete(String result);  
 11     }  
 12 
 13 
 14     /** 
 15      * 异步的Get请求 
 16      *  
 17      * @param urlStr 
 18      * @param callBack 
 19      */  
 20     public static void doGetAsyn(final String urlStr, final CallBack callBack)  
 21     {  
 22         new Thread()  
 23         {  
 24             public void run()  
 25             {  
 26                 try  
 27                 {  
 28                     String result = doGet(urlStr);  
 29                     if (callBack != null)  
 30                     {  
 31                         callBack.onRequestComplete(result);  
 32                     }  
 33                 } catch (Exception e)  
 34                 {  
 35                     e.printStackTrace();  
 36                 }  
 37 
 38             };  
 39         }.start();  
 40     }  
 41 
 42     /** 
 43      * 异步的Post请求 
 44      * @param urlStr 
 45      * @param params 
 46      * @param callBack 
 47      * @throws Exception 
 48      */  
 49     public static void doPostAsyn(final String urlStr, final String params,  
 50             final CallBack callBack) throws Exception  
 51     {  
 52         new Thread()  
 53         {  
 54             public void run()  
 55             {  
 56                 try  
 57                 {  
 58                     String result = doPost(urlStr, params);  
 59                     if (callBack != null)  
 60                     {  
 61                         callBack.onRequestComplete(result);  
 62                     }  
 63                 } catch (Exception e)  
 64                 {  
 65                     e.printStackTrace();  
 66                 }  
 67 
 68             };  
 69         }.start();  
 70 
 71     }  
 72 
 73     /** 
 74      * Get请求,获得返回数据 
 75      *  
 76      * @param urlStr 
 77      * @return 
 78      * @throws Exception 
 79      */  
 80     public static String doGet(String urlStr)   
 81     {  
 82         URL url = null;  
 83         HttpURLConnection conn = null;  
 84         InputStream is = null;  
 85         ByteArrayOutputStream baos = null;  
 86         try  
 87         {  
 88             url = new URL(urlStr);  
 89             conn = (HttpURLConnection) url.openConnection();  
 90             conn.setReadTimeout(TIMEOUT_IN_MILLIONS);  
 91             conn.setConnectTimeout(TIMEOUT_IN_MILLIONS);  
 92             conn.setRequestMethod("GET");  
 93             conn.setRequestProperty("accept", "*/*");  
 94             conn.setRequestProperty("connection", "Keep-Alive");  
 95             if (conn.getResponseCode() == 200)  
 96             {  
 97                 is = conn.getInputStream();  
 98                 baos = new ByteArrayOutputStream();  
 99                 int len = -1;  
100                 byte[] buf = new byte[128];  
101 
102                 while ((len = is.read(buf)) != -1)  
103                 {  
104                     baos.write(buf, 0, len);  
105                 }  
106                 baos.flush();  
107                 return baos.toString();  
108             } else  
109             {  
110                 throw new RuntimeException(" responseCode is not 200 ... ");  
111             }  
112 
113         } catch (Exception e)  
114         {  
115             e.printStackTrace();  
116         } finally  
117         {  
118             try  
119             {  
120                 if (is != null)  
121                     is.close();  
122             } catch (IOException e)  
123             {  
124             }  
125             try  
126             {  
127                 if (baos != null)  
128                     baos.close();  
129             } catch (IOException e)  
130             {  
131             }  
132             conn.disconnect();  
133         }  
134 
135         return null ;  
136 
137     }  
138 
139     /**  
140      * 向指定 URL 发送POST方法的请求  
141      *   
142      * @param url  
143      *            发送请求的 URL  
144      * @param param  
145      *            请求参数,请求参数应该是 name1=value1&name2=value2 的形式。  
146      * @return 所代表远程资源的响应结果  
147      * @throws Exception  
148      */  
149     public static String doPost(String url, String param)   
150     {  
151         PrintWriter out = null;  
152         BufferedReader in = null;  
153         String result = "";  
154         try  
155         {  
156             URL realUrl = new URL(url);  
157             // 打开和URL之间的连接  
158             HttpURLConnection conn = (HttpURLConnection) realUrl  
159                     .openConnection();  
160             // 设置通用的请求属性  
161             conn.setRequestProperty("accept", "*/*");  
162             conn.setRequestProperty("connection", "Keep-Alive");  
163             conn.setRequestMethod("POST");  
164             conn.setRequestProperty("Content-Type",  
165                     "application/x-www-form-urlencoded");  
166             conn.setRequestProperty("charset", "utf-8");  
167             conn.setUseCaches(false);  
168             // 发送POST请求必须设置如下两行  
169             conn.setDoOutput(true);  
170             conn.setDoInput(true);  
171             conn.setReadTimeout(TIMEOUT_IN_MILLIONS);  
172             conn.setConnectTimeout(TIMEOUT_IN_MILLIONS);  
173 
174             if (param != null && !param.trim().equals(""))  
175             {  
176                 // 获取URLConnection对象对应的输出流  
177                 out = new PrintWriter(conn.getOutputStream());  
178                 // 发送请求参数  
179                 out.print(param);  
180                 // flush输出流的缓冲  
181                 out.flush();  
182             }  
183             // 定义BufferedReader输入流来读取URL的响应  
184             in = new BufferedReader(  
185                     new InputStreamReader(conn.getInputStream()));  
186             String line;  
187             while ((line = in.readLine()) != null)  
188             {  
189                 result += line;  
190             }  
191         } catch (Exception e)  
192         {  
193             e.printStackTrace();  
194         }  
195         // 使用finally块来关闭输出流、输入流  
196         finally  
197         {  
198             try  
199             {  
200                 if (out != null)  
201                 {  
202                     out.close();  
203                 }  
204                 if (in != null)  
205                 {  
206                     in.close();  
207                 }  
208             } catch (IOException ex)  
209             {  
210                 ex.printStackTrace();  
211             }  
212         }  
213         return result;  
214     }  
215 }  

十一、时间工具类 TimeUtils.java

 1 public class TimeUtils {
 2 
 3     public static final SimpleDateFormat DEFAULT_DATE_FORMAT = 
 4         new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 5     public static final SimpleDateFormat DATE_FORMAT_DATE = 
 6         new SimpleDateFormat("yyyy-MM-dd");
 7 
 8     private TimeUtils() {
 9         throw new AssertionError();
10     }
11 
12     /**
13      * long time to string
14      * 
15      * @param timeInMillis
16      * @param dateFormat
17      * @return
18      */
19     public static String getTime(long timeInMillis, SimpleDateFormat dateFormat) {
20         return dateFormat.format(new Date(timeInMillis));
21     }
22 
23     /**
24      * long time to string, format is {@link #DEFAULT_DATE_FORMAT}
25      * 
26      * @param timeInMillis
27      * @return
28      */
29     public static String getTime(long timeInMillis) {
30         return getTime(timeInMillis, DEFAULT_DATE_FORMAT);
31     }
32 
33     /**
34      * get current time in milliseconds
35      * 
36      * @return
37      */
38     public static long getCurrentTimeInLong() {
39         return System.currentTimeMillis();
40     }
41 
42     /**
43      * get current time in milliseconds, format is {@link #DEFAULT_DATE_FORMAT}
44      * 
45      * @return
46      */
47     public static String getCurrentTimeInString() {
48         return getTime(getCurrentTimeInLong());
49     }
50 
51     /**
52      * get current time in milliseconds
53      * 
54      * @return
55      */
56     public static String getCurrentTimeInString(SimpleDateFormat dateFormat) {
57         return getTime(getCurrentTimeInLong(), dateFormat);
58     }
59 }

十二、文件工具类 FileUtils.java

  1 public class FileUtils {
  2 
  3     public final static String FILE_EXTENSION_SEPARATOR = ".";
  4 
  5     private FileUtils() {
  6         throw new AssertionError();
  7     }
  8 
  9     /**
 10      * read file
 11      * 
 12      * @param filePath
 13      * @param charsetName The name of a supported {@link java.nio.charset.Charset </code>charset<code>}
 14      * @return if file not exist, return null, else return content of file
 15      * @throws RuntimeException if an error occurs while operator BufferedReader
 16      */
 17     public static StringBuilder readFile(String filePath, String charsetName) {
 18         File file = new File(filePath);
 19         StringBuilder fileContent = new StringBuilder("");
 20         if (file == null || !file.isFile()) {
 21             return null;
 22         }
 23 
 24         BufferedReader reader = null;
 25         try {
 26             InputStreamReader is = new InputStreamReader(new FileInputStream(file), charsetName);
 27             reader = new BufferedReader(is);
 28             String line = null;
 29             while ((line = reader.readLine()) != null) {
 30                 if (!fileContent.toString().equals("")) {
 31                     fileContent.append("
");
 32                 }
 33                 fileContent.append(line);
 34             }
 35             return fileContent;
 36         } catch (IOException e) {
 37             throw new RuntimeException("IOException occurred. ", e);
 38         } finally {
 39             IOUtils.close(reader);
 40         }
 41     }
 42 
 43     /**
 44      * write file
 45      * 
 46      * @param filePath
 47      * @param content
 48      * @param append is append, if true, write to the end of file, else clear content of file and write into it
 49      * @return return false if content is empty, true otherwise
 50      * @throws RuntimeException if an error occurs while operator FileWriter
 51      */
 52     public static boolean writeFile(String filePath, String content, boolean append) {
 53         if (StringUtils.isEmpty(content)) {
 54             return false;
 55         }
 56 
 57         FileWriter fileWriter = null;
 58         try {
 59             makeDirs(filePath);
 60             fileWriter = new FileWriter(filePath, append);
 61             fileWriter.write(content);
 62             return true;
 63         } catch (IOException e) {
 64             throw new RuntimeException("IOException occurred. ", e);
 65         } finally {
 66             IOUtils.close(fileWriter);
 67         }
 68     }
 69 
 70     /**
 71      * write file
 72      * 
 73      * @param filePath
 74      * @param contentList
 75      * @param append is append, if true, write to the end of file, else clear content of file and write into it
 76      * @return return false if contentList is empty, true otherwise
 77      * @throws RuntimeException if an error occurs while operator FileWriter
 78      */
 79     public static boolean writeFile(String filePath, List<String> contentList, boolean append) {
 80         if (ListUtils.isEmpty(contentList)) {
 81             return false;
 82         }
 83 
 84         FileWriter fileWriter = null;
 85         try {
 86             makeDirs(filePath);
 87             fileWriter = new FileWriter(filePath, append);
 88             int i = 0;
 89             for (String line : contentList) {
 90                 if (i++ > 0) {
 91                     fileWriter.write("
");
 92                 }
 93                 fileWriter.write(line);
 94             }
 95             return true;
 96         } catch (IOException e) {
 97             throw new RuntimeException("IOException occurred. ", e);
 98         } finally {
 99             IOUtils.close(fileWriter);
100         }
101     }
102 
103     /**
104      * write file, the string will be written to the begin of the file
105      * 
106      * @param filePath
107      * @param content
108      * @return
109      */
110     public static boolean writeFile(String filePath, String content) {
111         return writeFile(filePath, content, false);
112     }
113 
114     /**
115      * write file, the string list will be written to the begin of the file
116      * 
117      * @param filePath
118      * @param contentList
119      * @return
120      */
121     public static boolean writeFile(String filePath, List<String> contentList) {
122         return writeFile(filePath, contentList, false);
123     }
124 
125     /**
126      * write file, the bytes will be written to the begin of the file
127      * 
128      * @param filePath
129      * @param stream
130      * @return
131      * @see {@link #writeFile(String, InputStream, boolean)}
132      */
133     public static boolean writeFile(String filePath, InputStream stream) {
134         return writeFile(filePath, stream, false);
135     }
136 
137     /**
138      * write file
139      * 
140      * @param file the file to be opened for writing.
141      * @param stream the input stream
142      * @param append if <code>true</code>, then bytes will be written to the end of the file rather than the beginning
143      * @return return true
144      * @throws RuntimeException if an error occurs while operator FileOutputStream
145      */
146     public static boolean writeFile(String filePath, InputStream stream, boolean append) {
147         return writeFile(filePath != null ? new File(filePath) : null, stream, append);
148     }
149 
150     /**
151      * write file, the bytes will be written to the begin of the file
152      * 
153      * @param file
154      * @param stream
155      * @return
156      * @see {@link #writeFile(File, InputStream, boolean)}
157      */
158     public static boolean writeFile(File file, InputStream stream) {
159         return writeFile(file, stream, false);
160     }
161 
162     /**
163      * write file
164      * 
165      * @param file the file to be opened for writing.
166      * @param stream the input stream
167      * @param append if <code>true</code>, then bytes will be written to the end of the file rather than the beginning
168      * @return return true
169      * @throws RuntimeException if an error occurs while operator FileOutputStream
170      */
171     public static boolean writeFile(File file, InputStream stream, boolean append) {
172         OutputStream o = null;
173         try {
174             makeDirs(file.getAbsolutePath());
175             o = new FileOutputStream(file, append);
176             byte data[] = new byte[1024];
177             int length = -1;
178             while ((length = stream.read(data)) != -1) {
179                 o.write(data, 0, length);
180             }
181             o.flush();
182             return true;
183         } catch (FileNotFoundException e) {
184             throw new RuntimeException("FileNotFoundException occurred. ", e);
185         } catch (IOException e) {
186             throw new RuntimeException("IOException occurred. ", e);
187         } finally {
188             IOUtils.close(o);
189             IOUtils.close(stream);
190         }
191     }
192 
193     /**
194      * move file
195      * 
196      * @param sourceFilePath
197      * @param destFilePath
198      */
199     public static void moveFile(String sourceFilePath, String destFilePath) {
200         if (TextUtils.isEmpty(sourceFilePath) || TextUtils.isEmpty(destFilePath)) {
201             throw new RuntimeException("Both sourceFilePath and destFilePath cannot be null.");
202         }
203         moveFile(new File(sourceFilePath), new File(destFilePath));
204     }
205 
206     /**
207      * move file
208      * 
209      * @param srcFile
210      * @param destFile
211      */
212     public static void moveFile(File srcFile, File destFile) {
213         boolean rename = srcFile.renameTo(destFile);
214         if (!rename) {
215             copyFile(srcFile.getAbsolutePath(), destFile.getAbsolutePath());
216             deleteFile(srcFile.getAbsolutePath());
217         }
218     }
219 
220     /**
221      * copy file
222      * 
223      * @param sourceFilePath
224      * @param destFilePath
225      * @return
226      * @throws RuntimeException if an error occurs while operator FileOutputStream
227      */
228     public static boolean copyFile(String sourceFilePath, String destFilePath) {
229         InputStream inputStream = null;
230         try {
231             inputStream = new FileInputStream(sourceFilePath);
232         } catch (FileNotFoundException e) {
233             throw new RuntimeException("FileNotFoundException occurred. ", e);
234         }
235         return writeFile(destFilePath, inputStream);
236     }
237 
238     /**
239      * read file to string list, a element of list is a line
240      * 
241      * @param filePath
242      * @param charsetName The name of a supported {@link java.nio.charset.Charset </code>charset<code>}
243      * @return if file not exist, return null, else return content of file
244      * @throws RuntimeException if an error occurs while operator BufferedReader
245      */
246     public static List<String> readFileToList(String filePath, String charsetName) {
247         File file = new File(filePath);
248         List<String> fileContent = new ArrayList<String>();
249         if (file == null || !file.isFile()) {
250             return null;
251         }
252 
253         BufferedReader reader = null;
254         try {
255             InputStreamReader is = new InputStreamReader(new FileInputStream(file), charsetName);
256             reader = new BufferedReader(is);
257             String line = null;
258             while ((line = reader.readLine()) != null) {
259                 fileContent.add(line);
260             }
261             return fileContent;
262         } catch (IOException e) {
263             throw new RuntimeException("IOException occurred. ", e);
264         } finally {
265             IOUtils.close(reader);
266         }
267     }
268 
269     /**
270      * get file name from path, not include suffix
271      * 
272      * <pre>
273      *      getFileNameWithoutExtension(null)               =   null
274      *      getFileNameWithoutExtension("")                 =   ""
275      *      getFileNameWithoutExtension("   ")              =   "   "
276      *      getFileNameWithoutExtension("abc")              =   "abc"
277      *      getFileNameWithoutExtension("a.mp3")            =   "a"
278      *      getFileNameWithoutExtension("a.b.rmvb")         =   "a.b"
279      *      getFileNameWithoutExtension("c:\")              =   ""
280      *      getFileNameWithoutExtension("c:\a")             =   "a"
281      *      getFileNameWithoutExtension("c:\a.b")           =   "a"
282      *      getFileNameWithoutExtension("c:a.txt\a")        =   "a"
283      *      getFileNameWithoutExtension("/home/admin")      =   "admin"
284      *      getFileNameWithoutExtension("/home/admin/a.txt/b.mp3")  =   "b"
285      * </pre>
286      * 
287      * @param filePath
288      * @return file name from path, not include suffix
289      * @see
290      */
291     public static String getFileNameWithoutExtension(String filePath) {
292         if (StringUtils.isEmpty(filePath)) {
293             return filePath;
294         }
295 
296         int extenPosi = filePath.lastIndexOf(FILE_EXTENSION_SEPARATOR);
297         int filePosi = filePath.lastIndexOf(File.separator);
298         if (filePosi == -1) {
299             return (extenPosi == -1 ? filePath : filePath.substring(0, extenPosi));
300         }
301         if (extenPosi == -1) {
302             return filePath.substring(filePosi + 1);
303         }
304         return (filePosi < extenPosi ? filePath.substring(filePosi + 1, extenPosi) : filePath.substring(filePosi + 1));
305     }
306 
307     /**
308      * get file name from path, include suffix
309      * 
310      * <pre>
311      *      getFileName(null)               =   null
312      *      getFileName("")                 =   ""
313      *      getFileName("   ")              =   "   "
314      *      getFileName("a.mp3")            =   "a.mp3"
315      *      getFileName("a.b.rmvb")         =   "a.b.rmvb"
316      *      getFileName("abc")              =   "abc"
317      *      getFileName("c:\")              =   ""
318      *      getFileName("c:\a")             =   "a"
319      *      getFileName("c:\a.b")           =   "a.b"
320      *      getFileName("c:a.txt\a")        =   "a"
321      *      getFileName("/home/admin")      =   "admin"
322      *      getFileName("/home/admin/a.txt/b.mp3")  =   "b.mp3"
323      * </pre>
324      * 
325      * @param filePath
326      * @return file name from path, include suffix
327      */
328     public static String getFileName(String filePath) {
329         if (StringUtils.isEmpty(filePath)) {
330             return filePath;
331         }
332 
333         int filePosi = filePath.lastIndexOf(File.separator);
334         return (filePosi == -1) ? filePath : filePath.substring(filePosi + 1);
335     }
336 
337     /**
338      * get folder name from path
339      * 
340      * <pre>
341      *      getFolderName(null)               =   null
342      *      getFolderName("")                 =   ""
343      *      getFolderName("   ")              =   ""
344      *      getFolderName("a.mp3")            =   ""
345      *      getFolderName("a.b.rmvb")         =   ""
346      *      getFolderName("abc")              =   ""
347      *      getFolderName("c:\")              =   "c:"
348      *      getFolderName("c:\a")             =   "c:"
349      *      getFolderName("c:\a.b")           =   "c:"
350      *      getFolderName("c:a.txt\a")        =   "c:a.txt"
351      *      getFolderName("c:a\b\c\d.txt")    =   "c:a\b\c"
352      *      getFolderName("/home/admin")      =   "/home"
353      *      getFolderName("/home/admin/a.txt/b.mp3")  =   "/home/admin/a.txt"
354      * </pre>
355      * 
356      * @param filePath
357      * @return
358      */
359     public static String getFolderName(String filePath) {
360 
361         if (StringUtils.isEmpty(filePath)) {
362             return filePath;
363         }
364 
365         int filePosi = filePath.lastIndexOf(File.separator);
366         return (filePosi == -1) ? "" : filePath.substring(0, filePosi);
367     }
368 
369     /**
370      * get suffix of file from path
371      * 
372      * <pre>
373      *      getFileExtension(null)               =   ""
374      *      getFileExtension("")                 =   ""
375      *      getFileExtension("   ")              =   "   "
376      *      getFileExtension("a.mp3")            =   "mp3"
377      *      getFileExtension("a.b.rmvb")         =   "rmvb"
378      *      getFileExtension("abc")              =   ""
379      *      getFileExtension("c:\")              =   ""
380      *      getFileExtension("c:\a")             =   ""
381      *      getFileExtension("c:\a.b")           =   "b"
382      *      getFileExtension("c:a.txt\a")        =   ""
383      *      getFileExtension("/home/admin")      =   ""
384      *      getFileExtension("/home/admin/a.txt/b")  =   ""
385      *      getFileExtension("/home/admin/a.txt/b.mp3")  =   "mp3"
386      * </pre>
387      * 
388      * @param filePath
389      * @return
390      */
391     public static String getFileExtension(String filePath) {
392         if (StringUtils.isBlank(filePath)) {
393             return filePath;
394         }
395 
396         int extenPosi = filePath.lastIndexOf(FILE_EXTENSION_SEPARATOR);
397         int filePosi = filePath.lastIndexOf(File.separator);
398         if (extenPosi == -1) {
399             return "";
400         }
401         return (filePosi >= extenPosi) ? "" : filePath.substring(extenPosi + 1);
402     }
403 
404     /**
405      * Creates the directory named by the trailing filename of this file, including the complete directory path required
406      * to create this directory. <br/>
407      * <br/>
408      * <ul>
409      * <strong>Attentions:</strong>
410      * <li>makeDirs("C:\Users\Trinea") can only create users folder</li>
411      * <li>makeFolder("C:\Users\Trinea\") can create Trinea folder</li>
412      * </ul>
413      * 
414      * @param filePath
415      * @return true if the necessary directories have been created or the target directory already exists, false one of
416      *         the directories can not be created.
417      *         <ul>
418      *         <li>if {@link FileUtils#getFolderName(String)} return null, return false</li>
419      *         <li>if target directory already exists, return true</li>
420      *         <li>return {@link java.io.File#makeFolder}</li>
421      *         </ul>
422      */
423     public static boolean makeDirs(String filePath) {
424         String folderName = getFolderName(filePath);
425         if (StringUtils.isEmpty(folderName)) {
426             return false;
427         }
428 
429         File folder = new File(folderName);
430         return (folder.exists() && folder.isDirectory()) ? true : folder.mkdirs();
431     }
432 
433     /**
434      * @param filePath
435      * @return
436      * @see #makeDirs(String)
437      */
438     public static boolean makeFolders(String filePath) {
439         return makeDirs(filePath);
440     }
441 
442     /**
443      * Indicates if this file represents a file on the underlying file system.
444      * 
445      * @param filePath
446      * @return
447      */
448     public static boolean isFileExist(String filePath) {
449         if (StringUtils.isBlank(filePath)) {
450             return false;
451         }
452 
453         File file = new File(filePath);
454         return (file.exists() && file.isFile());
455     }
456 
457     /**
458      * Indicates if this file represents a directory on the underlying file system.
459      * 
460      * @param directoryPath
461      * @return
462      */
463     public static boolean isFolderExist(String directoryPath) {
464         if (StringUtils.isBlank(directoryPath)) {
465             return false;
466         }
467 
468         File dire = new File(directoryPath);
469         return (dire.exists() && dire.isDirectory());
470     }
471 
472     /**
473      * delete file or directory
474      * <ul>
475      * <li>if path is null or empty, return true</li>
476      * <li>if path not exist, return true</li>
477      * <li>if path exist, delete recursion. return true</li>
478      * <ul>
479      * 
480      * @param path
481      * @return
482      */
483     public static boolean deleteFile(String path) {
484         if (StringUtils.isBlank(path)) {
485             return true;
486         }
487 
488         File file = new File(path);
489         if (!file.exists()) {
490             return true;
491         }
492         if (file.isFile()) {
493             return file.delete();
494         }
495         if (!file.isDirectory()) {
496             return false;
497         }
498         for (File f : file.listFiles()) {
499             if (f.isFile()) {
500                 f.delete();
501             } else if (f.isDirectory()) {
502                 deleteFile(f.getAbsolutePath());
503             }
504         }
505         return file.delete();
506     }
507 
508     /**
509      * get file size
510      * <ul>
511      * <li>if path is null or empty, return -1</li>
512      * <li>if path exist and it is a file, return file size, else return -1</li>
513      * <ul>
514      * 
515      * @param path
516      * @return returns the length of this file in bytes. returns -1 if the file does not exist.
517      */
518     public static long getFileSize(String path) {
519         if (StringUtils.isBlank(path)) {
520             return -1;
521         }
522 
523         File file = new File(path);
524         return (file.exists() && file.isFile() ? file.length() : -1);
525     }
526 }

十三、assets和raw资源工具类 ResourceUtils.java

  1 public class ResourceUtils {
  2 
  3     private ResourceUtils() {
  4         throw new AssertionError();
  5     }
  6 
  7     /**
  8      * get an asset using ACCESS_STREAMING mode. This provides access to files that have been bundled with an
  9      * application as assets -- that is, files placed in to the "assets" directory.
 10      * 
 11      * @param context
 12      * @param fileName The name of the asset to open. This name can be hierarchical.
 13      * @return
 14      */
 15     public static String geFileFromAssets(Context context, String fileName) {
 16         if (context == null || StringUtils.isEmpty(fileName)) {
 17             return null;
 18         }
 19 
 20         StringBuilder s = new StringBuilder("");
 21         try {
 22             InputStreamReader in = new InputStreamReader(context.getResources().getAssets().open(fileName));
 23             BufferedReader br = new BufferedReader(in);
 24             String line;
 25             while ((line = br.readLine()) != null) {
 26                 s.append(line);
 27             }
 28             return s.toString();
 29         } catch (IOException e) {
 30             e.printStackTrace();
 31             return null;
 32         }
 33     }
 34 
 35     /**
 36      * get content from a raw resource. This can only be used with resources whose value is the name of an asset files
 37      * -- that is, it can be used to open drawable, sound, and raw resources; it will fail on string and color
 38      * resources.
 39      * 
 40      * @param context
 41      * @param resId The resource identifier to open, as generated by the appt tool.
 42      * @return
 43      */
 44     public static String geFileFromRaw(Context context, int resId) {
 45         if (context == null) {
 46             return null;
 47         }
 48 
 49         StringBuilder s = new StringBuilder();
 50         try {
 51             InputStreamReader in = new InputStreamReader(context.getResources().openRawResource(resId));
 52             BufferedReader br = new BufferedReader(in);
 53             String line;
 54             while ((line = br.readLine()) != null) {
 55                 s.append(line);
 56             }
 57             return s.toString();
 58         } catch (IOException e) {
 59             e.printStackTrace();
 60             return null;
 61         }
 62     }
 63 
 64     /**
 65      * same to {@link ResourceUtils#geFileFromAssets(Context, String)}, but return type is List<String>
 66      * 
 67      * @param context
 68      * @param fileName
 69      * @return
 70      */
 71     public static List<String> geFileToListFromAssets(Context context, String fileName) {
 72         if (context == null || StringUtils.isEmpty(fileName)) {
 73             return null;
 74         }
 75 
 76         List<String> fileContent = new ArrayList<String>();
 77         try {
 78             InputStreamReader in = new InputStreamReader(context.getResources().getAssets().open(fileName));
 79             BufferedReader br = new BufferedReader(in);
 80             String line;
 81             while ((line = br.readLine()) != null) {
 82                 fileContent.add(line);
 83             }
 84             br.close();
 85             return fileContent;
 86         } catch (IOException e) {
 87             e.printStackTrace();
 88             return null;
 89         }
 90     }
 91 
 92     /**
 93      * same to {@link ResourceUtils#geFileFromRaw(Context, int)}, but return type is List<String>
 94      * 
 95      * @param context
 96      * @param resId
 97      * @return
 98      */
 99     public static List<String> geFileToListFromRaw(Context context, int resId) {
100         if (context == null) {
101             return null;
102         }
103 
104         List<String> fileContent = new ArrayList<String>();
105         BufferedReader reader = null;
106         try {
107             InputStreamReader in = new InputStreamReader(context.getResources().openRawResource(resId));
108             reader = new BufferedReader(in);
109             String line = null;
110             while ((line = reader.readLine()) != null) {
111                 fileContent.add(line);
112             }
113             reader.close();
114             return fileContent;
115         } catch (IOException e) {
116             e.printStackTrace();
117             return null;
118         }
119     }
120 }

十四、单例工具类 SingletonUtils.java

 1 public abstract class SingletonUtils<T> {
 2 
 3     private T instance;
 4 
 5     protected abstract T newInstance();
 6 
 7     public final T getInstance() {
 8         if (instance == null) {
 9             synchronized (SingletonUtils.class) {
10                 if (instance == null) {
11                     instance = newInstance();
12                 }
13             }
14         }
15         return instance;
16     }
17 }

十五、数据库工具类 SqliteUtils.java

 1 public class SqliteUtils {
 2 
 3     private static volatile SqliteUtils instance;
 4 
 5     private DbHelper                    dbHelper;
 6     private SQLiteDatabase              db;
 7 
 8     private SqliteUtils(Context context) {
 9         dbHelper = new DbHelper(context);
10         db = dbHelper.getWritableDatabase();
11     }
12 
13     public static SqliteUtils getInstance(Context context) {
14         if (instance == null) {
15             synchronized (SqliteUtils.class) {
16                 if (instance == null) {
17                     instance = new SqliteUtils(context);
18                 }
19             }
20         }
21         return instance;
22     }
23 
24     public SQLiteDatabase getDb() {
25         return db;
26     }
27 }
原文地址:https://www.cnblogs.com/lijinlun0825/p/5153538.html