package safeluck.drive.evaluation.util; import android.app.Application; import android.content.Context; import android.content.res.Resources; import android.os.Environment; import android.text.TextUtils; import android.util.Log; import com.anyun.exam.lib.MyLog; import com.anyun.exam.lib.util.ByteUtil; import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.util.List; import java.util.Map; import safeluck.drive.evaluation.bean.ExamMap; public class FileUtil { private static final String TAG = "FileUtil"; /** * 读取assert目录下 txt文本文件内容 * @param context * @param assetFileName * @return */ public static StringBuffer readAssetTxtFile(Context context, String assetFileName) { String lineTxt = null; StringBuffer stringBuffer = new StringBuffer(); try { InputStream inputStream = null; try { inputStream = context.getAssets() .open(assetFileName); } catch (IOException e) { e.printStackTrace(); } InputStreamReader inputStreamReader = new InputStreamReader(inputStream); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); while((lineTxt = bufferedReader.readLine()) != null){ // System.out.println(lineTxt); stringBuffer.append(lineTxt); } inputStreamReader.close(); bufferedReader.close(); } catch (IOException e) { e.printStackTrace(); } return stringBuffer; } public static void createdirs(Context context){ String dir = Environment.getExternalStorageDirectory().getAbsolutePath()+"/"+context.getPackageName(); File file = new File(dir); if (!file.exists()){ file.mkdir(); }else{ Log.i(TAG, "createdirs: 目录已经存在"); } } public static StringBuffer readTxtFileFromSD(Context context,String fileName,boolean isRootDir){ String lineTxt = null; StringBuffer stringBuffer = new StringBuffer(); try { String dir = Environment.getExternalStorageDirectory().getAbsolutePath()+"/"; InputStream inputStream = null; if (isRootDir){ }else{ dir = dir+context.getPackageName(); } File file = new File(dir,fileName); if (!file.exists()){ MyLog.d(TAG,dir+"目录下"+fileName+"文件不存在"); return null; } try { inputStream = new FileInputStream(file); } catch (IOException e) { e.printStackTrace(); } InputStreamReader inputStreamReader = new InputStreamReader(inputStream); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); while((lineTxt = bufferedReader.readLine()) != null){ System.out.println(lineTxt); stringBuffer.append(lineTxt); } inputStreamReader.close(); bufferedReader.close(); } catch (IOException e) { e.printStackTrace(); } return stringBuffer; } public static StringBuffer readMCUtFileFromSD(Context context,String fileName){ String lineTxt = null; StringBuffer stringBuffer = new StringBuffer(); try { String dir = Environment.getExternalStorageDirectory().getAbsolutePath()+"/"; InputStream inputStream = null; File file = new File(dir,fileName); if (!file.exists()){ MyLog.d(TAG,dir+"目录下"+fileName+"文件不存在"); return null; } try { inputStream = new FileInputStream(file); } catch (IOException e) { e.printStackTrace(); } InputStreamReader inputStreamReader = new InputStreamReader(inputStream,"GB2312"); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); while((lineTxt = bufferedReader.readLine()) != null){ // System.out.println( ByteUtil.byte2hex(lineTxt.getBytes("ISO-8859-1"))); stringBuffer.append(lineTxt); } inputStreamReader.close(); bufferedReader.close(); } catch (IOException e) { e.printStackTrace(); } return stringBuffer; } /** * * @param fromFile 源文件路径包括文件名(绝对路径) * @param toFile */ public static void copyFile(String fromFile,String toFile){ try { InputStream inputStream =new FileInputStream(fromFile); OutputStream outputStream = new FileOutputStream(toFile); byte[] bytes = new byte[1024]; while ((inputStream.read(bytes))>0){ outputStream.write(bytes); } inputStream.close(); outputStream.close(); } catch (IOException e) { e.printStackTrace(); } } /** * 拷贝assert目录下的文件到 安装包目录下 * @param context * @param assertfileName */ public static void copyAssertFileToSD(Context context,String assertfileName){ try { InputStream inputStream = null; try { inputStream = context.getAssets() .open(assertfileName); } catch (IOException e) { e.printStackTrace(); } deleteFile(context.getPackageName()+"/",assertfileName); OutputStream outputStream = new FileOutputStream( new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/"+context.getPackageName(), assertfileName)); byte[] bytes = new byte[1024]; while ((inputStream.read(bytes))>0){ outputStream.write(bytes); } outputStream.close(); inputStream.close(); } catch (Exception e) { e.printStackTrace(); } } /** * 删除某个文件 * @param parentPathName 当前文件的父目录一直到根目录(不包括根目录) * @param fileName 文件名 */ public static void deleteFile(String parentPathName, String fileName){ String dir =Environment.getExternalStorageDirectory().getAbsolutePath()+"/"; dir = dir+parentPathName; MyLog.i(TAG,"删除文件"+dir+fileName); File file = new File(dir,fileName); if (file.exists()){ file.delete(); } } public static byte[] readLocalFile(Context context,String fileName) throws IOException { InputStream inputStream = null; String dir = Environment.getExternalStorageDirectory().getAbsolutePath()+"/"; File file = new File(dir,fileName); if (!file.exists()){ MyLog.d(TAG,dir+"目录下"+fileName+"文件不存在"); return null; } try { inputStream = new FileInputStream(file); } catch (IOException e) { e.printStackTrace(); } byte[] data = toByteArray(inputStream); inputStream.close(); return data; } private static byte[] toByteArray(InputStream in) throws IOException { ByteArrayOutputStream out = new ByteArrayOutputStream(); byte[] buffer = new byte[1024 * 4]; int n = 0; while ((n = in.read(buffer)) != -1) { out.write(buffer, 0, n); } return out.toByteArray(); } private static final String SEP2 = "|"; private static final String SEP3 = "="; private static final String SEP1 = "#"; public static String ListToString(List list) { StringBuffer sb = new StringBuffer(); if (list != null && list.size() > 0) { for (int i = 0; i < list.size(); i++) { if (list.get(i) == null || list.get(i) == "") { continue; } // 如果值是list类型则调用自己 if (list.get(i) instanceof List) { sb.append(ListToString((List) list.get(i))); sb.append(SEP1); } else if (list.get(i) instanceof Map) { sb.append(MapToString((Map) list.get(i))); sb.append(SEP1); } else { sb.append(list.get(i)); sb.append(SEP1); } } } return "L" + sb.toString(); } /** * Map转换String * * @param map * :需要转换的Map * @return String转换后的字符串 */ public static String MapToString(Map map) { StringBuffer sb = new StringBuffer(); // 遍历map for (Object obj : map.keySet()) { if (obj == null) { continue; } Object key = obj; Object value = map.get(key); if (value instanceof List) { sb.append(key.toString() + SEP1 + ListToString((List) value)); sb.append(SEP2); } else if (value instanceof Map) { sb.append(key.toString() + SEP1 + MapToString((Map) value)); sb.append(SEP2); } else { sb.append(key.toString() + SEP3 + value.toString()); sb.append(SEP2); } } return "M" + sb.toString(); } public static byte[] readFile(String path) { InputStream inputStream = null; File file = new File(path); if (!file.exists()){ return null; } try { inputStream = new FileInputStream(file); } catch (IOException e) { e.printStackTrace(); } byte[] data = new byte[0]; try { data = toByteArray(inputStream); } catch (IOException e) { e.printStackTrace(); } try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } return data; } }