com.inter.trade.view.slideplayview.util.AbFileUtil.java Source code

Java tutorial

Introduction

Here is the source code for com.inter.trade.view.slideplayview.util.AbFileUtil.java

Source

/*
 * Copyright (C) 2013 www.418log.org
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.inter.trade.view.slideplayview.util;

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Arrays;
import java.util.Comparator;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.http.Header;
import org.apache.http.HttpResponse;

import com.inter.trade.view.slideplayview.AbConstant;
import com.inter.trade.view.slideplayview.AbFileCache;
import com.inter.trade.view.slideplayview.AbImageCache;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Environment;
import android.os.StatFs;
import android.util.Log;

// TODO: Auto-generated Javadoc
/**
 * ???.
 *
 * @author zhaoqp
 * @date 2011-12-10
 * @version v1.0
 */
public class AbFileUtil {

    /** The tag. */
    private static String TAG = "AbFileUtil";

    /** The Constant D. */
    private static final boolean D = true;

    /** ?. */
    private static String downPathRootDir = File.separator + "download" + File.separator;

    /** ?. */
    private static String downPathImageDir = downPathRootDir + "cache_images" + File.separator;

    /** ?. */
    private static String downPathFileDir = downPathRootDir + "cache_files" + File.separator;

    /**MB  ??B*/
    private static int MB = 1024 * 1024;

    /**200M?*/
    private static int freeSdSpaceNeededToCache = 200 * MB;

    /**
     * SD?.SD?????
     * @param url ??
     * @return ?
     */
    public static String downFileToSD(String url, String name) {
        InputStream in = null;
        FileOutputStream fileOutputStream = null;
        HttpURLConnection con = null;
        String downFilePath = null;
        File file = null;
        try {
            if (!isCanUseSD()) {
                return null;
            }
            File path = Environment.getExternalStorageDirectory();
            File fileDirectory = new File(path.getAbsolutePath() + downPathImageDir);
            if (!fileDirectory.exists()) {
                fileDirectory.mkdirs();
            }

            file = new File(fileDirectory, name);
            if (!file.exists()) {
                file.createNewFile();
            } else {
                return file.getPath();
            }
            downFilePath = file.getPath();
            URL mUrl = new URL(url);
            con = (HttpURLConnection) mUrl.openConnection();
            con.connect();
            in = con.getInputStream();
            fileOutputStream = new FileOutputStream(file);
            byte[] b = new byte[1024];
            int temp = 0;
            while ((temp = in.read(b)) != -1) {
                fileOutputStream.write(b, 0, temp);
            }
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        } finally {
            try {
                if (in != null) {
                    in.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            try {
                if (fileOutputStream != null) {
                    fileOutputStream.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            try {
                if (con != null) {
                    con.disconnect();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }

            try {
                //?,0B???
                if (file.length() == 0) {
                    Log.d(TAG, "?0");
                    file.delete();
                }

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return downFilePath;
    }

    /**
     * ???SD??SD?.
     * @param url ?
     * @param type ???AbConstant
     * ??
     * @param width 
     * @param height 
     * @return Bitmap 
     */
    public static Bitmap getBitmapFromSDCache(String url, int type, int width, int height) {
        Bitmap bitmap = null;
        try {
            if (AbStrUtil.isEmpty(url)) {
                return null;
            }

            //SD?? ??SD?
            if (!isCanUseSD() || freeSdSpaceNeededToCache < freeSpaceOnSD()) {
                bitmap = getBitmapFormURL(url, type, width, height);
                return bitmap;
            }

            if (type != AbConstant.ORIGINALIMG && (width <= 0 || height <= 0)) {
                throw new IllegalArgumentException("???0");
            }

            //key??
            String key = AbImageCache.getCacheKey(url, width, height, type);

            //?
            File path = Environment.getExternalStorageDirectory();
            File fileDirectory = new File(path.getAbsolutePath() + downPathImageDir);

            //??
            String suffix = getSuffixFromNetUrl(url);

            //??
            String fileName = key + suffix;
            File file = new File(fileDirectory, fileName);

            //?
            File fileCache = AbFileCache.getFileFromCache(fileName);
            if (fileCache == null) {
                String downFilePath = downFileToSD(url, file.getName());
                if (downFilePath != null) {
                    //??
                    AbFileCache.addFileToCache(fileName, file);
                    //?
                    return getBitmapFromSD(file, type, width, height);
                } else {
                    return null;
                }
            } else {
                bitmap = getBitmapFromSD(file, type, width, height);
                if (D)
                    Log.d(TAG, "SD:" + key + "," + bitmap);
                //?
                return bitmap;
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
        return bitmap;

    }

    /**
     * ???SD??.
     * @param url ?
     * @param type ???AbConstant
     * ??
     * @param width 
     * @param height 
     * @return Bitmap 
     */
    public static Bitmap getBitmapFromSD(String url, int type, int width, int height) {
        Bitmap bit = null;
        try {
            //SD??
            if (!isCanUseSD()) {
                return null;
            }

            if (type != AbConstant.ORIGINALIMG && (width <= 0 || height <= 0)) {
                throw new IllegalArgumentException("???0");
            }

            //key??
            String key = AbImageCache.getCacheKey(url, width, height, type);

            //?
            File path = Environment.getExternalStorageDirectory();
            File fileDirectory = new File(path.getAbsolutePath() + downPathImageDir);
            //??
            String suffix = getSuffixFromNetUrl(url);
            //??
            String fileName = key + suffix;
            File file = new File(fileDirectory, fileName);
            if (!file.exists()) {
                return null;
            } else {
                //?
                return getBitmapFromSD(file, type, width, height);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return bit;

    }

    /**
     * ???SD??.
     *
     * @param file the file
     * @param type ???AbConstant
     * ??
     * @param newWidth 
     * @param newHeight 
     * @return Bitmap 
     */
    public static Bitmap getBitmapFromSD(File file, int type, int newWidth, int newHeight) {
        Bitmap bit = null;
        try {
            //SD??
            if (!isCanUseSD()) {
                return null;
            }

            if (type != AbConstant.ORIGINALIMG && (newWidth <= 0 || newHeight <= 0)) {
                throw new IllegalArgumentException("???0");
            }

            //?
            if (!file.exists()) {
                return null;
            }

            //
            if (type == AbConstant.CUTIMG) {
                bit = AbImageUtil.cutImg(file, newWidth, newHeight);
            } else if (type == AbConstant.SCALEIMG) {
                bit = AbImageUtil.scaleImg(file, newWidth, newHeight);
            } else {
                bit = AbImageUtil.originalImg(file);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return bit;
    }

    /**
     * ???SD??.
     *
     * @param file the file
     * @return Bitmap 
     */
    public static Bitmap getBitmapFromSD(File file) {
        Bitmap bitmap = null;
        try {
            //SD??
            if (!isCanUseSD()) {
                return null;
            }
            //?
            if (!file.exists()) {
                return null;
            }
            //
            bitmap = AbImageUtil.originalImg(file);

        } catch (Exception e) {
            e.printStackTrace();
        }
        return bitmap;
    }

    /**
     * ??byte[].
     * @param imgByte byte[]
     * @param fileName ?????.jpg
     * @param type ???AbConstant
     * @param newWidth 
     * @param newHeight 
     * @return Bitmap 
     */
    public static Bitmap getBitmapFormByte(byte[] imgByte, String fileName, int type, int newWidth, int newHeight) {
        FileOutputStream fos = null;
        DataInputStream dis = null;
        ByteArrayInputStream bis = null;
        Bitmap b = null;
        File file = null;
        try {
            if (imgByte != null) {
                File sdcardDir = Environment.getExternalStorageDirectory();
                String path = sdcardDir.getAbsolutePath() + downPathImageDir;
                file = new File(path + fileName);

                if (!file.getParentFile().exists()) {
                    file.getParentFile().mkdirs();
                }
                if (!file.exists()) {
                    file.createNewFile();
                }
                fos = new FileOutputStream(file);
                int readLength = 0;
                bis = new ByteArrayInputStream(imgByte);
                dis = new DataInputStream(bis);
                byte[] buffer = new byte[1024];

                while ((readLength = dis.read(buffer)) != -1) {
                    fos.write(buffer, 0, readLength);
                    try {
                        Thread.sleep(500);
                    } catch (Exception e) {
                    }
                }
                fos.flush();

                b = getBitmapFromSD(file, type, newWidth, newHeight);
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (dis != null) {
                try {
                    dis.close();
                } catch (Exception e) {
                }
            }
            if (bis != null) {
                try {
                    bis.close();
                } catch (Exception e) {
                }
            }
            if (fos != null) {
                try {
                    fos.close();
                } catch (Exception e) {
                }
            }
        }
        return b;
    }

    /**
     * ???URL?.
     * @param url ??
     * @param type ???AbConstant
     * @param newWidth 
     * @param newHeight 
     * @return Bitmap 
     */
    public static Bitmap getBitmapFormURL(String url, int type, int newWidth, int newHeight) {
        Bitmap bit = null;
        try {
            bit = AbImageUtil.getBitmapFormURL(url, type, newWidth, newHeight);
        } catch (Exception e) {
            if (D)
                Log.d(TAG, "" + e.getMessage());
        }
        return bit;
    }

    /**
     * ???src?.
     *
     * @param src srcimage/arrow.png?
     * @return Bitmap 
     */
    public static Bitmap getBitmapFormSrc(String src) {
        Bitmap bit = null;
        try {
            bit = BitmapFactory.decodeStream(AbFileUtil.class.getResourceAsStream(src));
        } catch (Exception e) {
            if (D)
                Log.d(TAG, "?" + e.getMessage());
        }
        return bit;
    }

    /**
     * ????.
     *
     * @param Url 
     * @return int ?
     */
    public static int getContentLengthFormUrl(String Url) {
        int mContentLength = 0;
        try {
            URL url = new URL(Url);
            HttpURLConnection mHttpURLConnection = (HttpURLConnection) url.openConnection();
            mHttpURLConnection.setConnectTimeout(5 * 1000);
            mHttpURLConnection.setRequestMethod("GET");
            mHttpURLConnection.setRequestProperty("Accept",
                    "image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/xaml+xml, application/vnd.ms-xpsdocument, application/x-ms-xbap, application/x-ms-application, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*");
            mHttpURLConnection.setRequestProperty("Accept-Language", "zh-CN");
            mHttpURLConnection.setRequestProperty("Referer", Url);
            mHttpURLConnection.setRequestProperty("Charset", "UTF-8");
            mHttpURLConnection.setRequestProperty("User-Agent",
                    "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)");
            mHttpURLConnection.setRequestProperty("Connection", "Keep-Alive");
            mHttpURLConnection.connect();
            if (mHttpURLConnection.getResponseCode() == 200) {
                // ????
                mContentLength = mHttpURLConnection.getContentLength();
            }
        } catch (Exception e) {
            e.printStackTrace();
            if (D)
                Log.d(TAG, "?" + e.getMessage());
        }
        return mContentLength;
    }

    /**
     * ????.
     * @param url ?
     * @return ??
     */
    public static String getRealFileNameFromUrl(String url) {
        String name = null;
        try {
            if (AbStrUtil.isEmpty(url)) {
                return name;
            }

            URL mUrl = new URL(url);
            HttpURLConnection mHttpURLConnection = (HttpURLConnection) mUrl.openConnection();
            mHttpURLConnection.setConnectTimeout(5 * 1000);
            mHttpURLConnection.setRequestMethod("GET");
            mHttpURLConnection.setRequestProperty("Accept",
                    "image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/xaml+xml, application/vnd.ms-xpsdocument, application/x-ms-xbap, application/x-ms-application, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*");
            mHttpURLConnection.setRequestProperty("Accept-Language", "zh-CN");
            mHttpURLConnection.setRequestProperty("Referer", url);
            mHttpURLConnection.setRequestProperty("Charset", "UTF-8");
            mHttpURLConnection.setRequestProperty("User-Agent",
                    "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)");
            mHttpURLConnection.setRequestProperty("Connection", "Keep-Alive");
            mHttpURLConnection.connect();
            if (mHttpURLConnection.getResponseCode() == 200) {
                for (int i = 0;; i++) {
                    String mine = mHttpURLConnection.getHeaderField(i);
                    if (mine == null) {
                        break;
                    }
                    if ("content-disposition".equals(mHttpURLConnection.getHeaderFieldKey(i).toLowerCase())) {
                        Matcher m = Pattern.compile(".*filename=(.*)").matcher(mine.toLowerCase());
                        if (m.find())
                            return m.group(1).replace("\"", "");
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return name;
    }

    /**
     * ?????.
     * @param url ?
     * @return ??
     */
    public static String getFileNameFromUrl(String url, HttpResponse response) {
        if (AbStrUtil.isEmpty(url)) {
            return null;
        }
        String name = null;
        try {
            String suffix = null;
            //??
            if (url.lastIndexOf(".") != -1) {
                suffix = url.substring(url.lastIndexOf("."));
                if (suffix.indexOf("/") != -1 || suffix.indexOf("?") != -1 || suffix.indexOf("&") != -1) {
                    suffix = null;
                }
            }
            if (suffix == null) {
                //???
                String fileName = "unknow.tmp";
                Header[] headers = response.getHeaders("content-disposition");
                for (int i = 0; i < headers.length; i++) {
                    Matcher m = Pattern.compile(".*filename=(.*)").matcher(headers[i].getValue());
                    if (m.find()) {
                        fileName = m.group(1).replace("\"", "");
                    }
                }
                if (fileName != null && fileName.lastIndexOf(".") != -1) {
                    suffix = fileName.substring(fileName.lastIndexOf("."));
                }
            }
            name = AbMd5.MD5(url) + suffix;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return name;
    }

    /**
     * ?????.
     * @param url ?
     * @return ??
     */
    public static String getFileNameFromUrl(String url) {
        if (AbStrUtil.isEmpty(url)) {
            return null;
        }
        String name = null;
        try {
            String suffix = null;
            //??
            if (url.lastIndexOf(".") != -1) {
                suffix = url.substring(url.lastIndexOf("."));
                if (suffix.indexOf("/") != -1) {
                    suffix = null;
                }
            }
            if (suffix == null) {
                //??
                suffix = getSuffixFromNetUrl(url);
            }
            name = AbMd5.MD5(url) + suffix;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return name;
    }

    /**
     * ??.
     * @param url ?
     * @return ?
     */
    public static String getSuffixFromNetUrl(String url) {

        if (AbStrUtil.isEmpty(url)) {
            return null;
        }
        String suffix = ".tmp";
        try {
            //??
            if (url.lastIndexOf(".") != -1) {
                suffix = url.substring(url.lastIndexOf("."));
                if (suffix.indexOf("/") != -1 || suffix.indexOf("?") != -1 || suffix.indexOf("&") != -1) {
                    suffix = null;
                }
            }
            if (suffix == null) {
                //???
                String fileName = getRealFileNameFromUrl(url);
                if (fileName != null && fileName.lastIndexOf(".") != -1) {
                    suffix = fileName.substring(fileName.lastIndexOf("."));
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return suffix;
    }

    /**
     * ??sd??byte[].
     *
     * @param path sd?
     * @return byte[]
     */
    public static byte[] getByteArrayFromSD(String path) {
        byte[] bytes = null;
        ByteArrayOutputStream out = null;
        try {
            File file = new File(path);
            //SD??
            if (!isCanUseSD()) {
                return null;
            }
            //?
            if (!file.exists()) {
                return null;
            }

            long fileSize = file.length();
            if (fileSize > Integer.MAX_VALUE) {
                return null;
            }

            FileInputStream in = new FileInputStream(path);
            out = new ByteArrayOutputStream(1024);
            byte[] buffer = new byte[1024];
            int size = 0;
            while ((size = in.read(buffer)) != -1) {
                out.write(buffer, 0, size);
            }
            in.close();
            bytes = out.toByteArray();

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (out != null) {
                try {
                    out.close();
                } catch (Exception e) {
                }
            }
        }
        return bytes;
    }

    /**
     * ??byte.
     *
     * @param path the path
     * @param content the content
     * @param create the create
     */
    public static void writeByteArrayToSD(String path, byte[] content, boolean create) {

        FileOutputStream fos = null;
        try {
            File file = new File(path);
            //SD??
            if (!isCanUseSD()) {
                return;
            }
            //?
            if (!file.exists()) {
                if (create) {
                    File parent = file.getParentFile();
                    if (!parent.exists()) {
                        parent.mkdirs();
                        file.createNewFile();
                    }
                } else {
                    return;
                }
            }
            fos = new FileOutputStream(path);
            fos.write(content);

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (fos != null) {
                try {
                    fos.close();
                } catch (Exception e) {
                }
            }
        }
    }

    /**
     * ??SD??.
     *
     * @return true ?,false??
     */
    public static boolean isCanUseSD() {
        try {
            return Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

    /**
     * ????.
     * @return ?SD?download
     */
    public static String getDownPathImageDir() {
        return downPathImageDir;
    }

    /**
     * ???SD?download/cache_images.
     * @param downPathImageDir ?
     */
    public static void setDownPathImageDir(String downPathImageDir) {
        AbFileUtil.downPathImageDir = downPathImageDir;
    }

    /**
     * Gets the down path file dir.
     *
     * @return the down path file dir
     */
    public static String getDownPathFileDir() {
        return downPathFileDir;
    }

    /**
     * ???SD?download/cache_files.
     * @param downPathFileDir ?
     */
    public static void setDownPathFileDir(String downPathFileDir) {
        AbFileUtil.downPathFileDir = downPathFileDir;
    }

    /**
     * ????.
     *
     * @return ?
     */
    public static String getFullImageDownPathDir() {
        String pathDir = null;
        try {
            if (!isCanUseSD()) {
                return null;
            }
            //??
            File fileRoot = Environment.getExternalStorageDirectory();
            File dirFile = new File(fileRoot.getAbsolutePath() + AbFileUtil.downPathImageDir);
            if (!dirFile.exists()) {
                dirFile.mkdirs();
            }
            pathDir = dirFile.getPath();
        } catch (Exception e) {
        }
        return pathDir;
    }

    /**
     * ?
     */
    public static boolean initFileCache() {

        try {

            AbFileCache.cacheSize = 0;

            if (!isCanUseSD()) {
                return false;
            }

            File path = Environment.getExternalStorageDirectory();
            File fileDirectory = new File(path.getAbsolutePath() + downPathImageDir);
            File[] files = fileDirectory.listFiles();
            if (files == null) {
                return true;
            }
            for (int i = 0; i < files.length; i++) {
                AbFileCache.cacheSize += files[i].length();
                AbFileCache.addFileToCache(files[i].getName(), files[i]);
            }
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }

        return true;
    }

    /**
     * 
     * ?AbFileCache.maxCacheSizesdcard?FREE_SD_SPACE_NEEDED_TO_CACHE
     * 40%
     */
    public static boolean freeCacheFiles() {

        try {
            if (!isCanUseSD()) {
                return false;
            }

            File path = Environment.getExternalStorageDirectory();
            File fileDirectory = new File(path.getAbsolutePath() + downPathImageDir);
            File[] files = fileDirectory.listFiles();
            if (files == null) {
                return true;
            }

            int removeFactor = (int) ((0.4 * files.length) + 1);
            Arrays.sort(files, new FileLastModifSort());
            for (int i = 0; i < removeFactor; i++) {
                AbFileCache.cacheSize -= files[i].length();
                files[i].delete();
                AbFileCache.removeFileFromCache(files[i].getName());
            }

        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }

        return true;
    }

    /**
     * sdcard
     */
    public static int freeSpaceOnSD() {
        StatFs stat = new StatFs(Environment.getExternalStorageDirectory().getPath());
        double sdFreeMB = ((double) stat.getAvailableBlocks() * (double) stat.getBlockSize()) / MB;
        return (int) sdFreeMB;
    }

    /**
     * ???
     */
    public static class FileLastModifSort implements Comparator<File> {
        public int compare(File arg0, File arg1) {
            if (arg0.lastModified() > arg1.lastModified()) {
                return 1;
            } else if (arg0.lastModified() == arg1.lastModified()) {
                return 0;
            } else {
                return -1;
            }
        }
    }

    /**
     * 
     * ??B?
     * @return
     * @throws 
     */
    public static int getFreeSdSpaceNeededToCache() {
        return freeSdSpaceNeededToCache;
    }

    /**
     * 
     * ??B?
     * @param freeSdSpaceNeededToCache
     * @throws 
     */
    public static void setFreeSdSpaceNeededToCache(int freeSdSpaceNeededToCache) {
        AbFileUtil.freeSdSpaceNeededToCache = freeSdSpaceNeededToCache;
    }

    /**
      * 
     */
    public static boolean removeAllFileCache() {

        try {
            if (!isCanUseSD()) {
                return false;
            }

            File path = Environment.getExternalStorageDirectory();
            File fileDirectory = new File(path.getAbsolutePath() + downPathImageDir);
            File[] files = fileDirectory.listFiles();
            if (files == null) {
                return true;
            }
            for (int i = 0; i < files.length; i++) {
                files[i].delete();
            }
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }

    /**
     * 
     * ???Assets
     * @param context
     * @param name
     * @return
     * @throws 
     */
    public static String readAssetsByName(Context context, String name, String encoding) {
        String text = null;
        InputStreamReader inputReader = null;
        BufferedReader bufReader = null;
        try {
            inputReader = new InputStreamReader(context.getAssets().open(name));
            bufReader = new BufferedReader(inputReader);
            String line = null;
            StringBuffer buffer = new StringBuffer();
            while ((line = bufReader.readLine()) != null) {
                buffer.append(line);
            }
            text = new String(buffer.toString().getBytes(), encoding);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (bufReader != null) {
                    bufReader.close();
                }
                if (inputReader != null) {
                    inputReader.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return text;
    }

    /**
     * 
     * ???Raw
     * @param context
     * @param id
     * @return
     * @throws 
     */
    public static String readRawByName(Context context, int id, String encoding) {
        String text = null;
        InputStreamReader inputReader = null;
        BufferedReader bufReader = null;
        try {
            inputReader = new InputStreamReader(context.getResources().openRawResource(id));
            bufReader = new BufferedReader(inputReader);
            String line = null;
            StringBuffer buffer = new StringBuffer();
            while ((line = bufReader.readLine()) != null) {
                buffer.append(line);
            }
            text = new String(buffer.toString().getBytes(), encoding);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (bufReader != null) {
                    bufReader.close();
                }
                if (inputReader != null) {
                    inputReader.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return text;
    }

}