/* * Copyright (C) 2012 www.amsoft.cn * * 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.ab.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.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; 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 android.content.Context; import android.content.pm.PackageInfo; import android.content.res.AssetManager; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.drawable.Drawable; import android.os.Environment; import android.os.StatFs; import com.ab.global.AbAppConfig; // TODO: Auto-generated Javadoc /** * © 2012 amsoft.cn * 名称:AbFileUtil.java * 描述:文件操作类. * * @author 还如一梦中 * @version v1.0 * @date:2013-01-18 下午11:52:13 */ public class AbFileUtil { /** 默认APP根目录. */ private static String downloadRootDir = null; /** 默认下载图片文件目录. */ private static String imageDownloadDir = null; /** 默认下载文件目录. */ private static String fileDownloadDir = null; /** 默认缓存目录. */ private static String cacheDownloadDir = null; /** 默认下载数据库文件的目录. */ private static String dbDownloadDir = null; /** 剩余空间大于200M才使用SD缓存. */ private static int freeSdSpaceNeededToCache = 200*1024*1024; /** * 描述:通过文件的本地地址从SD卡读取图片. * * @param file the file * @param type 图片的处理类型(剪切或者缩放到指定大小,参考AbConstant类) * 如果设置为原图,则后边参数无效,得到原图 * @param desiredWidth 新图片的宽 * @param desiredHeight 新图片的高 * @return Bitmap 新图片 */ public static Bitmap getBitmapFromSD(File file,int type,int desiredWidth, int desiredHeight){ Bitmap bitmap = null; try { //SD卡是否存在 if(!isCanUseSD()){ return null; } //文件是否存在 if(!file.exists()){ return null; } //文件存在 if(type == AbImageUtil.CUTIMG){ bitmap = AbImageUtil.getCutBitmap(file,desiredWidth,desiredHeight); }else if(type == AbImageUtil.SCALEIMG){ bitmap = AbImageUtil.getScaleBitmap(file,desiredWidth,desiredHeight); }else{ bitmap = AbImageUtil.getBitmap(file); } } catch (Exception e) { e.printStackTrace(); } return bitmap; } /** * 描述:通过文件的本地地址从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.getBitmap(file); } catch (Exception e) { e.printStackTrace(); } return bitmap; } /** * 描述:将图片的byte[]写入本地文件. * @param imgByte 图片的byte[]形势 * @param fileName 文件名称,需要包含后缀,如.jpg * @param type 图片的处理类型(剪切或者缩放到指定大小,参考AbConstant类) * @param desiredWidth 新图片的宽 * @param desiredHeight 新图片的高 * @return Bitmap 新图片 */ public static Bitmap getBitmapFromByte(byte[] imgByte,String fileName,int type,int desiredWidth, int desiredHeight){ FileOutputStream fos = null; DataInputStream dis = null; ByteArrayInputStream bis = null; Bitmap bitmap = null; File file = null; try { if(imgByte!=null){ file = new File(imageDownloadDir+fileName); 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(); bitmap = getBitmapFromSD(file,type,desiredWidth,desiredHeight); } } 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 bitmap; } /** * 描述:根据URL从互连网获取图片. * @param url 要下载文件的网络地址 * @param desiredWidth 新图片的宽 * @param desiredHeight 新图片的高 * @return Bitmap 新图片 */ public static Bitmap getBitmapFromURL(String url,int desiredWidth, int desiredHeight){ Bitmap bitmap = null; try { bitmap = AbImageUtil.getBitmap(url,desiredWidth,desiredHeight); } catch (Exception e) { AbLogUtil.d(AbFileUtil.class, "下载图片异常:"+e.getMessage()); } return bitmap; } /** * 描述:获取src中的图片资源. * * @param src 图片的src路径,如(“image/arrow.png”) * @return Bitmap 图片 */ public static Bitmap getBitmapFromSrc(String src){ Bitmap bit = null; try { bit = BitmapFactory.decodeStream(AbFileUtil.class.getResourceAsStream(src)); } catch (Exception e) { AbLogUtil.d(AbFileUtil.class, "获取图片异常:"+e.getMessage()); } return bit; } /** * 描述:获取Asset中的图片资源. * * @param context the context * @param fileName the file name * @return Bitmap 图片 */ public static Bitmap getBitmapFromAsset(Context context,String fileName){ Bitmap bit = null; try { AssetManager assetManager = context.getAssets(); InputStream is = assetManager.open(fileName); bit = BitmapFactory.decodeStream(is); } catch (Exception e) { AbLogUtil.d(AbFileUtil.class, "获取图片异常:"+e.getMessage()); } return bit; } /** * 描述:获取Asset中的图片资源. * * @param context the context * @param fileName the file name * @return Drawable 图片 */ public static Drawable getDrawableFromAsset(Context context,String fileName){ Drawable drawable = null; try { AssetManager assetManager = context.getAssets(); InputStream is = assetManager.open(fileName); drawable = Drawable.createFromStream(is,null); } catch (Exception e) { AbLogUtil.d(AbFileUtil.class, "获取图片异常:"+e.getMessage()); } return drawable; } /** * 下载网络文件到SD卡中.如果SD中存在同名文件将不再下载 * * @param url 要下载文件的网络地址 * @param dirPath 文件路径 * @return 下载好的本地文件地址 */ public static String downloadFile(String url,String dirPath){ InputStream in = null; FileOutputStream fileOutputStream = null; HttpURLConnection connection = null; String downFilePath = null; File file = null; try { if(!isCanUseSD()){ return null; } //先判断SD卡中有没有这个文件,不比较后缀部分比较 String fileNameNoMIME = getCacheFileNameFromUrl(url); File parentFile = new File(dirPath); if(!parentFile.exists()){ parentFile.mkdirs(); } File[] files = parentFile.listFiles(); if(files!=null){ for(int i = 0; i < files.length; ++i){ String fileName = files[i].getName(); String name = fileName.substring(0,fileName.lastIndexOf(".")); if(name.equals(fileNameNoMIME)){ //文件已存在 return files[i].getPath(); } } } URL mUrl = new URL(url); connection = (HttpURLConnection)mUrl.openConnection(); connection.connect(); //获取文件名,下载文件 String fileName = getCacheFileNameFromUrl(url,connection); file = new File(dirPath,fileName); downFilePath = file.getPath(); if(!file.exists()){ file.createNewFile(); }else{ //文件已存在 return file.getPath(); } in = connection.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(); AbLogUtil.e(AbFileUtil.class, "有文件下载出错了,已删除"); //检查文件大小,如果文件为0B说明网络不好没有下载成功,要将建立的空文件删除 if(file != null){ file.delete(); } file = null; downFilePath = 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(connection!=null){ connection.disconnect(); } } catch (Exception e) { e.printStackTrace(); } } return downFilePath; } /** * 描述:获取网络文件的大小. * * @param Url 图片的网络路径 * @return int 网络文件的大小 */ public static int getContentLengthFromUrl(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(); AbLogUtil.d(AbFileUtil.class, "获取长度异常:"+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",""); 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(); AbLogUtil.e(AbFileUtil.class, "网络上获取文件名失败"); } return name; } /** * 获取真实文件名(xx.后缀),通过网络获取. * @param connection 连接 * @return 文件名 */ public static String getRealFileName(HttpURLConnection connection){ String name = null; try { if(connection == null){ return name; } if (connection.getResponseCode() == 200){ for (int i = 0;; i++) { String mime = connection.getHeaderField(i); if (mime == null){ break; } // "Content-Disposition","attachment; filename=1.txt" // Content-Length if ("content-disposition".equals(connection.getHeaderFieldKey(i).toLowerCase())) { Matcher m = Pattern.compile(".*filename=(.*)").matcher(mime.toLowerCase()); if (m.find()){ return m.group(1).replace("\"", ""); } } } } } catch (Exception e) { e.printStackTrace(); AbLogUtil.e(AbFileUtil.class, "网络上获取文件名失败"); } return name; } /** * 获取真实文件名(xx.后缀),通过网络获取. * * @param response the response * @return 文件名 */ public static String getRealFileName(HttpResponse response){ String name = null; try { if(response == null){ return name; } //获取文件名 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()){ name = m.group(1).replace("\"", ""); } } } catch (Exception e) { e.printStackTrace(); AbLogUtil.e(AbFileUtil.class, "网络上获取文件名失败"); } return name; } /** * 获取文件名(不含后缀). * * @param url 文件地址 * @return 文件名 */ public static String getCacheFileNameFromUrl(String url){ if(AbStrUtil.isEmpty(url)){ return null; } String name = null; try { name = AbMd5.MD5(url); } catch (Exception e) { e.printStackTrace(); } return name; } /** * 获取文件名(.后缀),外链模式和通过网络获取. * * @param url 文件地址 * @param response the response * @return 文件名 */ public static String getCacheFileNameFromUrl(String url,HttpResponse response){ if(AbStrUtil.isEmpty(url)){ return null; } String name = null; try { //获取后缀 String suffix = getMIMEFromUrl(url,response); if(AbStrUtil.isEmpty(suffix)){ suffix = ".ab"; } name = AbMd5.MD5(url)+suffix; } catch (Exception e) { e.printStackTrace(); } return name; } /** * 获取文件名(.后缀),外链模式和通过网络获取. * * @param url 文件地址 * @param connection the connection * @return 文件名 */ public static String getCacheFileNameFromUrl(String url,HttpURLConnection connection){ if(AbStrUtil.isEmpty(url)){ return null; } String name = null; try { //获取后缀 String suffix = getMIMEFromUrl(url,connection); if(AbStrUtil.isEmpty(suffix)){ suffix = ".ab"; } name = AbMd5.MD5(url)+suffix; } catch (Exception e) { e.printStackTrace(); } return name; } /** * 获取文件后缀,本地. * * @param url 文件地址 * @param connection the connection * @return 文件后缀 */ public static String getMIMEFromUrl(String url,HttpURLConnection connection){ if(AbStrUtil.isEmpty(url)){ return null; } String suffix = null; try { //获取后缀 if(url.lastIndexOf(".")!=-1){ suffix = url.substring(url.lastIndexOf(".")); if(suffix.indexOf("/")!=-1 || suffix.indexOf("?")!=-1 || suffix.indexOf("&")!=-1){ suffix = null; } } if(AbStrUtil.isEmpty(suffix)){ //获取文件名 这个效率不高 String fileName = getRealFileName(connection); if(fileName!=null && fileName.lastIndexOf(".")!=-1){ suffix = fileName.substring(fileName.lastIndexOf(".")); } } } catch (Exception e) { e.printStackTrace(); } return suffix; } /** * 获取文件后缀,本地和网络. * * @param url 文件地址 * @param response the response * @return 文件后缀 */ public static String getMIMEFromUrl(String url,HttpResponse response){ if(AbStrUtil.isEmpty(url)){ return null; } String mime = null; try { //获取后缀 if(url.lastIndexOf(".")!=-1){ mime = url.substring(url.lastIndexOf(".")); if(mime.indexOf("/")!=-1 || mime.indexOf("?")!=-1 || mime.indexOf("&")!=-1){ mime = null; } } if(AbStrUtil.isEmpty(mime)){ //获取文件名 这个效率不高 String fileName = getRealFileName(response); if(fileName!=null && fileName.lastIndexOf(".")!=-1){ mime = fileName.substring(fileName.lastIndexOf(".")); } } } catch (Exception e) { e.printStackTrace(); } return mime; } /** * 描述:从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) { } } } } /** * 将bitmap写入文件. * @param path * @param bitmap png */ public static void writeBitmapToSD(String path,Bitmap bitmap,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(); } } } fos = new FileOutputStream(path); bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); } catch (Exception e) { e.printStackTrace(); }finally{ if(fos!=null){ try { fos.close(); } catch (Exception e) { } } } } /** * 拷贝Assets目录内容到sd卡目录 * @param context * @param assetDir "dir" * @param outDir 完整sd卡路径 */ public static void copyAssets2SD(Context context, String assetDir, String outDir) { String[] files; try { files = context.getAssets().list(assetDir); File outDirFile = new File(outDir); if (!outDirFile.exists()) { outDirFile.mkdirs(); } for (int i = 0; i < files.length; i++) { String fileName = files[i]; String[] filesChild = context.getAssets().list(fileName); if (filesChild!=null && filesChild.length>0) { copyAssets2SD(context, fileName, outDir + "/"+fileName); } else { InputStream in = null; if(!AbStrUtil.isEmpty(assetDir)){ in = context.getAssets().open(assetDir + "/" + fileName); }else{ in = context.getAssets().open(fileName); } File outFile = new File(outDir+"/"+fileName); if(outFile.exists()){ outFile.delete(); } outFile.createNewFile(); OutputStream out = new FileOutputStream(outFile); byte[] buf = new byte[1024]; int len; while ((len = in.read(buf)) > 0) { out.write(buf, 0, len); } in.close(); out.close(); } } } catch (Exception e) { e.printStackTrace(); } } /** * 描述:SD卡是否能用. * * @return true 可用,false不可用 */ public static boolean isCanUseSD() { try { return Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED); } catch (Exception e) { e.printStackTrace(); } return false; } /** * 描述:初始化存储目录. * * @param context the context */ public static void initFileDir(Context context){ PackageInfo info = AbAppUtil.getPackageInfo(context); //默认下载文件根目录. String downloadRootPath = File.separator + AbAppConfig.DOWNLOAD_ROOT_DIR + File.separator + info.packageName + File.separator; //默认下载图片文件目录. String imageDownloadPath = downloadRootPath + AbAppConfig.DOWNLOAD_IMAGE_DIR + File.separator; //默认下载文件目录. String fileDownloadPath = downloadRootPath + AbAppConfig.DOWNLOAD_FILE_DIR + File.separator; //默认缓存目录. String cacheDownloadPath = downloadRootPath + AbAppConfig.CACHE_DIR + File.separator; //默认DB目录. String dbDownloadPath = downloadRootPath + AbAppConfig.DB_DIR + File.separator; try { if(!isCanUseSD()){ return; }else{ File root = Environment.getExternalStorageDirectory(); File downloadDir = new File(root.getAbsolutePath() + downloadRootPath); if(!downloadDir.exists()){ downloadDir.mkdirs(); } downloadRootDir = downloadDir.getPath(); File cacheDownloadDirFile = new File(root.getAbsolutePath() + cacheDownloadPath); if(!cacheDownloadDirFile.exists()){ cacheDownloadDirFile.mkdirs(); } cacheDownloadDir = cacheDownloadDirFile.getPath(); File imageDownloadDirFile = new File(root.getAbsolutePath() + imageDownloadPath); if(!imageDownloadDirFile.exists()){ imageDownloadDirFile.mkdirs(); } imageDownloadDir = imageDownloadDirFile.getPath(); File fileDownloadDirFile = new File(root.getAbsolutePath() + fileDownloadPath); if(!fileDownloadDirFile.exists()){ fileDownloadDirFile.mkdirs(); } fileDownloadDir = fileDownloadDirFile.getPath(); File dbDownloadDirFile = new File(root.getAbsolutePath() + dbDownloadPath); if(!dbDownloadDirFile.exists()){ dbDownloadDirFile.mkdirs(); } dbDownloadDir = dbDownloadDirFile.getPath(); } } catch (Exception e) { e.printStackTrace(); } } /** * 计算sdcard上的剩余空间. * * @return the int */ public static int freeSpaceOnSD() { StatFs stat = new StatFs(Environment.getExternalStorageDirectory().getPath()); double sdFreeMB = ((double)stat.getAvailableBlocks() * (double) stat.getBlockSize()) / 1024*1024; return (int) sdFreeMB; } /** * 根据文件的最后修改时间进行排序. */ public static class FileLastModifSort implements Comparator<File> { /* (non-Javadoc) * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) */ 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; } } } /** * 删除所有缓存文件. * * @return true, if successful */ public static boolean clearDownloadFile() { try { File fileDirectory = new File(downloadRootDir); deleteFile(fileDirectory); } catch (Exception e) { e.printStackTrace(); return false; } return true; } /** * 删除文件. * * @return true, if successful */ public static boolean deleteFile(File file) { try { if(!isCanUseSD()){ return false; } if (file == null) { return true; } if(file.isDirectory()){ File[] files = file.listFiles(); for (int i = 0; i < files.length; i++) { deleteFile(files[i]); } }else{ file.delete(); } } catch (Exception e) { e.printStackTrace(); return false; } return true; } /** * 描述:读取Assets目录的文件内容. * * @param context the context * @param name the name * @param encoding the encoding * @return the string */ 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 the context * @param id the id * @param encoding the encoding * @return the string */ 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; } /** * Gets the download root dir. * * @param context the context * @return the download root dir */ public static String getDownloadRootDir(Context context) { if(downloadRootDir == null){ initFileDir(context); } return downloadRootDir; } /** * Gets the image download dir. * * @param context the context * @return the image download dir */ public static String getImageDownloadDir(Context context) { if(downloadRootDir == null){ initFileDir(context); } return imageDownloadDir; } /** * Gets the file download dir. * * @param context the context * @return the file download dir */ public static String getFileDownloadDir(Context context) { if(downloadRootDir == null){ initFileDir(context); } return fileDownloadDir; } /** * Gets the cache download dir. * * @param context the context * @return the cache download dir */ public static String getCacheDownloadDir(Context context) { if(downloadRootDir == null){ initFileDir(context); } return cacheDownloadDir; } /** * Gets the db download dir. * * @param context the context * @return the db download dir */ public static String getDbDownloadDir(Context context) { if(downloadRootDir == null){ initFileDir(context); } return dbDownloadDir; } /** * Gets the free sd space needed to cache. * * @return the free sd space needed to cache */ public static int getFreeSdSpaceNeededToCache() { return freeSdSpaceNeededToCache; } }