你的位置:首页 > 操作系统

[操作系统]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 preferences110    * 111    * @param context112    * @param key The name of the preference to retrieve113    * @return The preference value if it exists, or -1. Throws ClassCastException if there is a preference with this114    *     name that is not a long115    * @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 preferences123    * 124    * @param context125    * @param key The name of the preference to retrieve126    * @param defaultValue Value to return if this preference does not exist127    * @return The preference value if it exists, or defValue. Throws ClassCastException if there is a preference with128    *     this name that is not a long129   */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 preferences137    * 138    * @param context139    * @param key The name of the preference to modify140    * @param value The new value for the preference141    * @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 preferences152    * 153    * @param context154    * @param key The name of the preference to retrieve155    * @return The preference value if it exists, or -1. Throws ClassCastException if there is a preference with this156    *     name that is not a float157    * @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 preferences165    * 166    * @param context167    * @param key The name of the preference to retrieve168    * @param defaultValue Value to return if this preference does not exist169    * @return The preference value if it exists, or defValue. Throws ClassCastException if there is a preference with170    *     this name that is not a float171   */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 preferences179    * 180    * @param context181    * @param key The name of the preference to modify182    * @param value The new value for the preference183    * @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 false194    * 195    * @param context196    * @param key The name of the preference to retrieve197    * @return The preference value if it exists, or false. Throws ClassCastException if there is a preference with this198    *     name that is not a boolean199    * @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 preferences207    * 208    * @param context209    * @param key The name of the preference to retrieve210    * @param defaultValue Value to return if this preference does not exist211    * @return The preference value if it exists, or defValue. Throws ClassCastException if there is a preference with212    *     this name that is not a boolean213   */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 string14    * 15    * @param timeInMillis16    * @param dateFormat17    * @return18   */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 [email protected] #DEFAULT_DATE_FORMAT}25    * 26    * @param timeInMillis27    * @return28   */29   public static String getTime(long timeInMillis) {30     return getTime(timeInMillis, DEFAULT_DATE_FORMAT);31   }32 33   /**34    * get current time in milliseconds35    * 36    * @return37   */38   public static long getCurrentTimeInLong() {39     return System.currentTimeMillis();40   }41 42   /**43    * get current time in milliseconds, format is [email protected] #DEFAULT_DATE_FORMAT}44    * 45    * @return46   */47   public static String getCurrentTimeInString() {48     return getTime(getCurrentTimeInLong());49   }50 51   /**52    * get current time in milliseconds53    * 54    * @return55   */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 [email protected] 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("\r\n"); 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("\r\n"); 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 file105    * 106    * @param filePath107    * @param content108    * @return109   */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 file116    * 117    * @param filePath118    * @param contentList119    * @return120   */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 file127    * 128    * @param filePath129    * @param stream130    * @return131    * @see [email protected] #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 file139    * 140    * @param file the file to be opened for writing.141    * @param stream the input stream142    * @param append if <code>true</code>, then bytes will be written to the end of the file rather than the beginning143    * @return return true144    * @throws RuntimeException if an error occurs while operator FileOutputStream145   */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 file152    * 153    * @param file154    * @param stream155    * @return156    * @see [email protected] #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 file164    * 165    * @param file the file to be opened for writing.166    * @param stream the input stream167    * @param append if <code>true</code>, then bytes will be written to the end of the file rather than the beginning168    * @return return true169    * @throws RuntimeException if an error occurs while operator FileOutputStream170   */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 file195    * 196    * @param sourceFilePath197    * @param destFilePath198   */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 file208    * 209    * @param srcFile210    * @param destFile211   */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 file222    * 223    * @param sourceFilePath224    * @param destFilePath225    * @return226    * @throws RuntimeException if an error occurs while operator FileOutputStream227   */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 line240    * 241    * @param filePath242    * @param charsetName The name of a supported [email protected] java.nio.charset.Charset </code>charset<code>}243    * @return if file not exist, return null, else return content of file244    * @throws RuntimeException if an error occurs while operator BufferedReader245   */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 suffix271    * 272    * <pre>273    *   getFileNameWithoutExtension(null)        =  null274    *   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 filePath288    * @return file name from path, not include suffix289    * @see290   */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 suffix309    * 310    * <pre>311    *   getFileName(null)        =  null312    *   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 filePath326    * @return file name from path, include suffix327   */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 path339    * 340    * <pre>341    *   getFolderName(null)        =  null342    *   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 filePath357    * @return358   */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 path371    * 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 filePath389    * @return390   */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 required406    * 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 filePath415    * @return true if the necessary directories have been created or the target directory already exists, false one of416    *     the directories can not be created.417    *     <ul>418    *     <li>if [email protected] FileUtils#getFolderName(String)} return null, return false</li>419    *     <li>if target directory already exists, return true</li>420    *     <li>return [email protected] 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 filePath435    * @return436    * @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 filePath446    * @return447   */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 directoryPath461    * @return462   */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 directory474    * <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 path481    * @return482   */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 size510    * <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 path516    * @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 [email protected] 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 [email protected] 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 }